llvm-6502/lib/IR
Duncan P. N. Exon Smith 95ff656ae0 AsmWriter: Write alloca array size explicitly (and -instcombine fixup)
Write the `alloca` array size explicitly when it's non-canonical.
Previously, if the array size was `iX 1` (where X is not 32), the type
would mutate to `i32` when round-tripping through assembly.

The testcase I added fails in `verify-uselistorder` (as well as
`FileCheck`), since the use-lists for `i32 1` and `i64 1` change.
(Manman Ren came across this when running `verify-uselistorder` on some
non-trivial, optimized code as part of PR5680.)

The type mutation started with r104911, which allowed array sizes to be
something other than an `i32`.  Starting with r204945, we
"canonicalized" to `i64` on 64-bit platforms -- and then on every
round-trip through assembly, mutated back to `i32`.

I bundled a fixup for `-instcombine` to avoid r204945 on scalar
allocations.  (There wasn't a clean way to sequence this into two
commits, since the assembly change on its own caused testcase churn, and
the `-instcombine` change can't be tested without the assembly changes.)

An obvious alternative fix -- change `AllocaInst::AllocaInst()`,
`AsmWriter` and `LLParser` to treat `intptr_t` as the canonical type for
scalar allocations -- was rejected out of hand, since this required
teaching them each about the data layout.

A follow-up commit will add an `-instcombine` to canonicalize the scalar
allocation array size to `i32 1` rather than leaving `iX 1` alone.

rdar://problem/20075773

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232200 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-13 19:30:44 +00:00
..
AsmWriter.cpp AsmWriter: Write alloca array size explicitly (and -instcombine fixup) 2015-03-13 19:30:44 +00:00
AsmWriter.h
AttributeImpl.h
Attributes.cpp
AutoUpgrade.cpp [X86, AVX2] Replace inserti128 and extracti128 intrinsics with generic shuffles 2015-03-12 23:16:18 +00:00
BasicBlock.cpp Remove getDataLayout() from Instruction/GlobalValue/BasicBlock/Function 2015-03-03 22:01:13 +00:00
CMakeLists.txt
Comdat.cpp
ConstantFold.cpp ConstantFold: Fix big shift constant folding 2015-03-13 16:39:46 +00:00
ConstantFold.h
ConstantRange.cpp [ConstantRange] Teach multiply to be cleverer about signed ranges. 2015-03-06 15:50:47 +00:00
Constants.cpp Simplify code. NFC. 2015-03-02 11:57:04 +00:00
ConstantsContext.h
Core.cpp Fix invalid cast. 2015-02-23 21:51:06 +00:00
DataLayout.cpp Teach DataLayout to infer a plausible alignment for things even when nothing is specified by the user. 2015-03-08 21:53:59 +00:00
DebugInfo.cpp Fix DwarfExpression::AddMachineRegExpression so it doesn't read past the 2015-03-04 17:39:33 +00:00
DebugInfoMetadata.cpp IR: Change MDFile to directly store the filename/directory 2015-02-20 20:35:17 +00:00
DebugLoc.cpp
DiagnosticInfo.cpp Simplify expressions involving boolean constants with clang-tidy 2015-03-09 01:57:13 +00:00
DiagnosticPrinter.cpp
DIBuilder.cpp DebugInfo: Move new hierarchy into place 2015-03-03 17:24:31 +00:00
Dominators.cpp
Function.cpp
GCOV.cpp
Globals.cpp Remove getDataLayout() from Instruction/GlobalValue/BasicBlock/Function 2015-03-03 22:01:13 +00:00
GVMaterializer.cpp
InlineAsm.cpp Simplify expressions involving boolean constants with clang-tidy 2015-03-09 01:57:13 +00:00
Instruction.cpp Remove getDataLayout() from Instruction/GlobalValue/BasicBlock/Function 2015-03-03 22:01:13 +00:00
Instructions.cpp DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
IntrinsicInst.cpp
IRBuilder.cpp PlaceSafepoints: use IRBuilder helpers 2015-02-26 00:35:56 +00:00
IRPrintingPasses.cpp
LegacyPassManager.cpp
LLVMBuild.txt
LLVMContext.cpp
LLVMContextImpl.cpp
LLVMContextImpl.h IR: Fix MDType fields from unsigned to uint64_t 2015-02-19 23:56:07 +00:00
Makefile
Mangler.cpp DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
MDBuilder.cpp [IC] Turn non-null MD on pointer loads to range MD on integer loads. 2015-02-25 05:10:25 +00:00
Metadata.cpp
MetadataImpl.h
MetadataTracking.cpp
Module.cpp Make DataLayout Non-Optional in the Module 2015-03-04 18:43:29 +00:00
module.modulemap
Pass.cpp
PassManager.cpp
PassRegistry.cpp Revert r231276 (including r231277): Add a lock() function in PassRegistry to speed up multi-thread synchronization. 2015-03-05 17:53:00 +00:00
Statepoint.cpp Add invoke related functionality into StatepointSite classes. 2015-02-19 11:02:11 +00:00
SymbolTableListTraitsImpl.h
Type.cpp
TypeFinder.cpp Fix Value dangling reference debug output 2015-03-10 23:55:38 +00:00
Use.cpp
UseListOrder.cpp
User.cpp
Value.cpp Fix Value dangling reference debug output 2015-03-10 23:55:38 +00:00
ValueSymbolTable.cpp
ValueTypes.cpp
Verifier.cpp Fix an infinite recursion in the verifier caused by calling isSized on a recursive type. 2015-03-13 06:41:26 +00:00