Skip to content

Ws lend #136643

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Ws lend #136643

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions llvm/CPackConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# This file will be configured to contain variables for CPack. These variables
# should be set in the CMake list file of the project before CPack module is
# included. The list of available CPACK_xxx variables and their associated
# documentation may be obtained using
# cpack --help-variable-list
#
# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME)
# and some are specific to a generator
# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables
# usually begin with CPACK_<GENNAME>_xxxx.


set(CPACK_BINARY_DEB "OFF")
set(CPACK_BINARY_FREEBSD "OFF")
set(CPACK_BINARY_IFW "OFF")
set(CPACK_BINARY_NSIS "OFF")
set(CPACK_BINARY_RPM "OFF")
set(CPACK_BINARY_STGZ "ON")
set(CPACK_BINARY_TBZ2 "OFF")
set(CPACK_BINARY_TGZ "ON")
set(CPACK_BINARY_TXZ "OFF")
set(CPACK_BINARY_TZ "ON")
set(CPACK_BUILD_SOURCE_DIRS "/home/gyx/work/LLVM-project/llvm;/home/gyx/work/LLVM-project/llvm")
set(CPACK_CMAKE_GENERATOR "Ninja")
set(CPACK_COMPONENTS_ALL "")
set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE")
set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE")
set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "LLVM built using CMake")
set(CPACK_GENERATOR "STGZ;TGZ;TZ")
set(CPACK_INSTALL_CMAKE_PROJECTS "/home/gyx/work/LLVM-project/llvm;LLVM;ALL;/")
set(CPACK_INSTALL_PREFIX "/usr/local")
set(CPACK_MODULE_PATH "/home/gyx/work/LLVM-project/llvm/cmake;/home/gyx/work/LLVM-project/llvm/cmake/modules;/home/gyx/work/LLVM-project/llvm/../cmake/Modules")
set(CPACK_NSIS_DISPLAY_NAME "LLVM")
set(CPACK_NSIS_INSTALLER_ICON_CODE "")
set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
set(CPACK_NSIS_PACKAGE_NAME "LLVM")
set(CPACK_NSIS_UNINSTALL_NAME "Uninstall")
set(CPACK_OUTPUT_CONFIG_FILE "/home/gyx/work/LLVM-project/llvm/CPackConfig.cmake")
set(CPACK_PACKAGE_DEFAULT_LOCATION "/")
set(CPACK_PACKAGE_DESCRIPTION_FILE "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LLVM built using CMake")
set(CPACK_PACKAGE_FILE_NAME "LLVM-20.0.0git-Linux")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "LLVM")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "LLVM")
set(CPACK_PACKAGE_NAME "LLVM")
set(CPACK_PACKAGE_RELOCATABLE "true")
set(CPACK_PACKAGE_VENDOR "LLVM")
set(CPACK_PACKAGE_VERSION "20.0.0git")
set(CPACK_PACKAGE_VERSION_MAJOR "20")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_RESOURCE_FILE_LICENSE "/home/gyx/work/LLVM-project/llvm/LICENSE.TXT")
set(CPACK_RESOURCE_FILE_README "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_RESOURCE_FILE_WELCOME "/usr/local/share/cmake-3.20/Templates/CPack.GenericWelcome.txt")
set(CPACK_SET_DESTDIR "OFF")
set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;TXZ;TZ")
set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/gyx/work/LLVM-project/llvm/CPackSourceConfig.cmake")
set(CPACK_SOURCE_RPM "OFF")
set(CPACK_SOURCE_TBZ2 "ON")
set(CPACK_SOURCE_TGZ "ON")
set(CPACK_SOURCE_TXZ "ON")
set(CPACK_SOURCE_TZ "ON")
set(CPACK_SOURCE_ZIP "OFF")
set(CPACK_SYSTEM_NAME "Linux")
set(CPACK_THREADS "1")
set(CPACK_TOPLEVEL_TAG "Linux")
set(CPACK_WIX_SIZEOF_VOID_P "8")

if(NOT CPACK_PROPERTIES_FILE)
set(CPACK_PROPERTIES_FILE "/home/gyx/work/LLVM-project/llvm/CPackProperties.cmake")
endif()

if(EXISTS ${CPACK_PROPERTIES_FILE})
include(${CPACK_PROPERTIES_FILE})
endif()
85 changes: 85 additions & 0 deletions llvm/CPackSourceConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# This file will be configured to contain variables for CPack. These variables
# should be set in the CMake list file of the project before CPack module is
# included. The list of available CPACK_xxx variables and their associated
# documentation may be obtained using
# cpack --help-variable-list
#
# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME)
# and some are specific to a generator
# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables
# usually begin with CPACK_<GENNAME>_xxxx.


set(CPACK_BINARY_DEB "OFF")
set(CPACK_BINARY_FREEBSD "OFF")
set(CPACK_BINARY_IFW "OFF")
set(CPACK_BINARY_NSIS "OFF")
set(CPACK_BINARY_RPM "OFF")
set(CPACK_BINARY_STGZ "ON")
set(CPACK_BINARY_TBZ2 "OFF")
set(CPACK_BINARY_TGZ "ON")
set(CPACK_BINARY_TXZ "OFF")
set(CPACK_BINARY_TZ "ON")
set(CPACK_BUILD_SOURCE_DIRS "/home/gyx/work/LLVM-project/llvm;/home/gyx/work/LLVM-project/llvm")
set(CPACK_CMAKE_GENERATOR "Ninja")
set(CPACK_COMPONENTS_ALL "")
set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE")
set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE")
set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "LLVM built using CMake")
set(CPACK_GENERATOR "TBZ2;TGZ;TXZ;TZ")
set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#")
set(CPACK_INSTALLED_DIRECTORIES "/home/gyx/work/LLVM-project/llvm;/")
set(CPACK_INSTALL_CMAKE_PROJECTS "")
set(CPACK_INSTALL_PREFIX "/usr/local")
set(CPACK_MODULE_PATH "/home/gyx/work/LLVM-project/llvm/cmake;/home/gyx/work/LLVM-project/llvm/cmake/modules;/home/gyx/work/LLVM-project/llvm/../cmake/Modules")
set(CPACK_NSIS_DISPLAY_NAME "LLVM")
set(CPACK_NSIS_INSTALLER_ICON_CODE "")
set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
set(CPACK_NSIS_PACKAGE_NAME "LLVM")
set(CPACK_NSIS_UNINSTALL_NAME "Uninstall")
set(CPACK_OUTPUT_CONFIG_FILE "/home/gyx/work/LLVM-project/llvm/CPackConfig.cmake")
set(CPACK_PACKAGE_DEFAULT_LOCATION "/")
set(CPACK_PACKAGE_DESCRIPTION_FILE "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LLVM built using CMake")
set(CPACK_PACKAGE_FILE_NAME "LLVM-20.0.0git-Source")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "LLVM")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "LLVM")
set(CPACK_PACKAGE_NAME "LLVM")
set(CPACK_PACKAGE_RELOCATABLE "true")
set(CPACK_PACKAGE_VENDOR "LLVM")
set(CPACK_PACKAGE_VERSION "20.0.0git")
set(CPACK_PACKAGE_VERSION_MAJOR "20")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_RESOURCE_FILE_LICENSE "/home/gyx/work/LLVM-project/llvm/LICENSE.TXT")
set(CPACK_RESOURCE_FILE_README "/usr/local/share/cmake-3.20/Templates/CPack.GenericDescription.txt")
set(CPACK_RESOURCE_FILE_WELCOME "/usr/local/share/cmake-3.20/Templates/CPack.GenericWelcome.txt")
set(CPACK_RPM_PACKAGE_SOURCES "ON")
set(CPACK_SET_DESTDIR "OFF")
set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;TXZ;TZ")
set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#")
set(CPACK_SOURCE_INSTALLED_DIRECTORIES "/home/gyx/work/LLVM-project/llvm;/")
set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/gyx/work/LLVM-project/llvm/CPackSourceConfig.cmake")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "LLVM-20.0.0git-Source")
set(CPACK_SOURCE_RPM "OFF")
set(CPACK_SOURCE_TBZ2 "ON")
set(CPACK_SOURCE_TGZ "ON")
set(CPACK_SOURCE_TOPLEVEL_TAG "Linux-Source")
set(CPACK_SOURCE_TXZ "ON")
set(CPACK_SOURCE_TZ "ON")
set(CPACK_SOURCE_ZIP "OFF")
set(CPACK_STRIP_FILES "")
set(CPACK_SYSTEM_NAME "Linux")
set(CPACK_THREADS "1")
set(CPACK_TOPLEVEL_TAG "Linux-Source")
set(CPACK_WIX_SIZEOF_VOID_P "8")

if(NOT CPACK_PROPERTIES_FILE)
set(CPACK_PROPERTIES_FILE "/home/gyx/work/LLVM-project/llvm/CPackProperties.cmake")
endif()

if(EXISTS ${CPACK_PROPERTIES_FILE})
include(${CPACK_PROPERTIES_FILE})
endif()
3 changes: 2 additions & 1 deletion llvm/include/llvm/TargetParser/Triple.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,8 @@ class Triple {
renderscript32, // 32-bit RenderScript
renderscript64, // 64-bit RenderScript
ve, // NEC SX-Aurora Vector Engine
LastArchType = ve
pe,
LastArchType = pe
};
enum SubArchType {
NoSubArch,
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARC/ARCMCInstLower.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class LLVM_LIBRARY_VISIBILITY ARCMCInstLower {
using MachineOperandType = MachineOperand::MachineOperandType;
MCContext *Ctx;
AsmPrinter &Printer;

public:
ARCMCInstLower(MCContext *C, AsmPrinter &asmprinter);
void Lower(const MachineInstr *MI, MCInst &OutMI) const;
Expand Down
39 changes: 39 additions & 0 deletions llvm/lib/Target/PE/AIM.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
第一阶段:
寄存器 ABI 名字 描述 Saver
x0 zero 0值寄存器,硬编码为0,写入数据忽略,读取永远为0 -
x1 ra 返回地址 Caller
x2 sp 栈指针 Callee
x3 gp 全局指针 -
x4 tp 线程指针 -
x5 t0 临时寄存器或者备用的链接寄存器 Caller
x6-x7 t1-t2 临时寄存器 Caller
x8 s0/fp 需要保存的寄存器或者帧指针寄存器 Callee
x9 s1 需要保存的寄存器,保存原进程中的关键数据,避免在函数调用过程中被破坏 Callee
x10-x11 a0-a1 函数参数/返回值 Caller
x12-x17 a2-a7 函数参数 Caller
x18-x27 s2-s11 需要保存的寄存器 Callee
x28-x31 t3-t6 临时寄存器 Caller

测试程序test.ll
define i32 @test() {
ret i32 1
}

RISCV生成汇编程序test.s
.text
.attribute 4, 16
.attribute 5, "rv32i2p0"
.file "test.ll"
.globl test # -- Begin function test
.p2align 2
.type test,@function
test: # @test
.cfi_startproc
# %bb.0:
addi a0, zero, 1
ret
.Lfunc_end0:
.size test, .Lfunc_end0-test
.cfi_endproc
# -- End function
.section ".note.GNU-stack","",@progbits
54 changes: 54 additions & 0 deletions llvm/lib/Target/PE/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#创建一个PE的LLVM组件,具有JIT即时编译功能
add_llvm_component_group(PE HAS_JIT)

#指定目标架构的定义文件为PE.td,该文件使用TableGen语言描述目标架构的指令集、寄存器、调度模型等核心元数据
set(LLVM_TARGET_DEFINITIONS PE.td)
set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD "PE")

#通过LLVM的TableGen工具,从PE.td生成C++头文件(.inc),用于后续编译
tablegen(LLVM PEGenAsmWriter.inc -gen-asm-writer)
tablegen(LLVM PEGenDAGISel.inc -gen-dag-isel)
tablegen(LLVM PEGenCallingConv.inc -gen-callingconv)
tablegen(LLVM PEGenInstrInfo.inc -gen-instr-info)
tablegen(LLVM PEGenRegisterInfo.inc -gen-register-info)
tablegen(LLVM PEGenSubtargetInfo.inc -gen-subtarget)
tablegen(LLVM PEGenMCPseudoLowering.inc -gen-pseudo-lowering)

#将生成的TableGen文件(如PEGen*.inc)声明为公共构建目标,确保其他LLVM组件(如汇编器、反汇编器)能访问这些文件
add_public_tablegen_target(PECommonTableGen)

add_llvm_target(PECodeGen
PEFrameLowering.cpp
PEInstrInfo.cpp
PEISelLowering.cpp
PERegisterInfo.cpp
PESubtarget.cpp
PETargetMachine.cpp
PEISelDAGToDAG.cpp
PEAsmPrinter.cpp
PE.h

LINK_COMPONENTS
Analysis
AsmPrinter
CodeGen
CodeGenTypes
Core
GlobalISel
MC
PEDesc
PEInfo
SelectionDAG
Support
Target
TargetParser
TransformUtils

ADD_TO_COMPONENT #添加PE组件
PE
)
#递归构建子目录中的模块,通常包括
# add_subdirectory(AsmParser)
# add_subdirectory(Disassembler)
add_subdirectory(MCTargetDesc)
add_subdirectory(TargetInfo)
14 changes: 14 additions & 0 deletions llvm/lib/Target/PE/MCTargetDesc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
add_llvm_component_library(LLVMPEDesc
PEMCTargetDesc.cpp
PEMCAsmInfo.cpp
PEInstPrinter.cpp

LINK_COMPONENTS
MC
PEInfo
Support
TargetParser

ADD_TO_COMPONENT
PE
)
59 changes: 59 additions & 0 deletions llvm/lib/Target/PE/MCTargetDesc/PEInstPrinter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/* --- PEInstPrinter.cpp --- */

/* ------------------------------------------
author: 高宇翔
date: 4/9/2025
------------------------------------------ */

#include "PEInstPrinter.h"
#include "llvm/MC/MCRegister.h" // Include the header for MCRegister
#include "llvm/MC/MCInst.h"

using namespace llvm;

#define DEBUG_TYPE "asm-printer"

#define PRINT_ALIAS_INSTR
#include "PEGenAsmWriter.inc"

void PEInstPrinter::printRegName(raw_ostream &OS, MCRegister Reg) {
OS << StringRef(getRegisterName(Reg,PE::ABIRegAltName)).lower();
}

void PEInstPrinter::printInst(const MCInst *MI, uint64_t Address,
StringRef Annot, const MCSubtargetInfo &STI,
raw_ostream &O) {
if(!printAliasInstr(MI, Address, O))
printInstruction(MI, Address, O);
printAnnotation(O, Annot);
}

void llvm::PEInstPrinter::PrintMemOperand(const MCInst *MI, unsigned OpNo,
raw_ostream &O) {

//打印格式:12(sp)
//先打印立即数
printOperand(MI, OpNo+1, O);
O<<"(";
//再打印寄存器
printOperand(MI, OpNo, O);
O<<")";
}

void PEInstPrinter::printOperand(const MCInst *MI, unsigned OpNum,
raw_ostream &O) {
const MCOperand &Op = MI->getOperand(OpNum);
if (Op.isReg()) {
printRegName(O, Op.getReg());
return;
}

if (Op.isImm()) {
O << Op.getImm();
return;
}
}
const char *PEInstPrinter::getRegisterName(MCRegister Reg){
return getRegisterName(Reg,PE::NoRegAltName);

}
Loading