mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 06:09:05 +00:00
164b86b439
Problem: LLVM needs more function attributes than currently available (32 bits). One such proposed attribute is "address_safety", which shows that a function is being checked for address safety (by AddressSanitizer, SAFECode, etc). Solution: - extend the Attributes from 32 bits to 64-bits - wrap the object into a class so that unsigned is never erroneously used instead - change "unsigned" to "Attributes" throughout the code, including one place in clang. - the class has no "operator uint64 ()", but it has "uint64_t Raw() " to support packing/unpacking. - the class has "safe operator bool()" to support the common idiom: if (Attributes attr = getAttrs()) useAttrs(attr); - The CTOR from uint64_t is marked explicit, so I had to add a few explicit CTOR calls - Add the new attribute "address_safety". Doing it in the same commit to check that attributes beyond first 32 bits actually work. - Some of the functions from the Attribute namespace are worth moving inside the class, but I'd prefer to have it as a separate commit. Tested: "make check" on Linux (32-bit and 64-bit) and Mac (10.6) built/run spec CPU 2006 on Linux with clang -O2. This change will break clang build in lib/CodeGen/CGCall.cpp. The following patch will fix it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148553 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
ADT | ||
Analysis | ||
Assembly | ||
Bitcode | ||
CodeGen | ||
Config | ||
DebugInfo | ||
ExecutionEngine | ||
MC | ||
Object | ||
Support | ||
TableGen | ||
Target | ||
Transforms | ||
Argument.h | ||
Attributes.h | ||
AutoUpgrade.h | ||
BasicBlock.h | ||
CallGraphSCCPass.h | ||
CallingConv.h | ||
CMakeLists.txt | ||
Constant.h | ||
Constants.h | ||
DebugInfoProbe.h | ||
DefaultPasses.h | ||
DerivedTypes.h | ||
Function.h | ||
GlobalAlias.h | ||
GlobalValue.h | ||
GlobalVariable.h | ||
GVMaterializer.h | ||
InitializePasses.h | ||
InlineAsm.h | ||
InstrTypes.h | ||
Instruction.def | ||
Instruction.h | ||
Instructions.h | ||
IntrinsicInst.h | ||
Intrinsics.h | ||
Intrinsics.td | ||
IntrinsicsARM.td | ||
IntrinsicsCellSPU.td | ||
IntrinsicsHexagon.td | ||
IntrinsicsPowerPC.td | ||
IntrinsicsPTX.td | ||
IntrinsicsX86.td | ||
IntrinsicsXCore.td | ||
LinkAllPasses.h | ||
LinkAllVMCore.h | ||
Linker.h | ||
LLVMContext.h | ||
Metadata.h | ||
Module.h | ||
OperandTraits.h | ||
Operator.h | ||
Pass.h | ||
PassAnalysisSupport.h | ||
PassManager.h | ||
PassManagers.h | ||
PassRegistry.h | ||
PassSupport.h | ||
SymbolTableListTraits.h | ||
Type.h | ||
Use.h | ||
User.h | ||
Value.h | ||
ValueSymbolTable.h |