| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 74633
|
| |
|
|
|
|
|
| |
!0 = constant metadata !{i32 21, i32 22}
@llvm.blah = constant metadata !{i32 1000, i16 200, metadata !0}
llvm-svn: 74630
|
| |
|
|
|
|
| |
PR4482.
llvm-svn: 74613
|
| |
|
|
|
|
| |
variable is present.
llvm-svn: 74610
|
| |
|
|
|
|
| |
defines any register. Also teaches the default commuteInstruction() to commute instruction without definitions (e.g. X86::test / ARM::tsp).
llvm-svn: 74602
|
| |
|
|
|
|
|
|
| |
liveintervalanalysis and coalescer handling of implicit_def.
Note, isUndef marker must be placed even on implicit_def def operand or else the scavenger will not ignore it. This is necessary because -O0 path does not use liveintervalanalysis, it treats implicit_def just like any other def.
llvm-svn: 74601
|
| |
|
|
|
|
| |
pic mode.
llvm-svn: 74582
|
| |
|
|
|
|
| |
the code to annotate machineoperands to LiveIntervalAnalysis. It also add markers for implicit_def that define physical registers. The rest, is just a lot of details.
llvm-svn: 74580
|
| |
|
|
| |
llvm-svn: 74577
|
| |
|
|
|
|
|
| |
allowed to be undefined when the expression is seen, we cannot enforce the
same-section requirement until the entire assembly file has been seen.
llvm-svn: 74565
|
| |
|
|
| |
llvm-svn: 74555
|
| |
|
|
| |
llvm-svn: 74549
|
| |
|
|
|
|
|
| |
Avoid unnecessary duplication of operand 0 of X86::FpSET_ST0_80. This duplication would
cause one register to remain on the stack at the function return.
llvm-svn: 74534
|
| |
|
|
|
|
| |
This was caused by me confounding FP0 and ST(0).
llvm-svn: 74523
|
| |
|
|
|
|
| |
isUndef mark is not being put on implicit_def of physical registers (created for parameter passing, etc.).
llvm-svn: 74519
|
| |
|
|
|
|
|
|
|
|
| |
operand is defined by an implicit_def. That means it can def / use any register and passes (e.g. register scavenger) can feel free to ignore them.
The register allocator, when it allocates a register to a virtual register defined by an implicit_def, can allocate any physical register without worrying about overlapping live ranges. It should mark all of operands of the said virtual register so later passes will do the right thing.
This is not the best solution. But it should be a lot less fragile to having the scavenger try to track what is defined by implicit_def.
llvm-svn: 74518
|
| |
|
|
| |
llvm-svn: 74500
|
| |
|
|
| |
llvm-svn: 74499
|
| |
|
|
| |
llvm-svn: 74498
|
| |
|
|
| |
llvm-svn: 74490
|
| |
|
|
| |
llvm-svn: 74487
|
| |
|
|
| |
llvm-svn: 74478
|
| |
|
|
| |
llvm-svn: 74468
|
| |
|
|
| |
llvm-svn: 74464
|
| |
|
|
| |
llvm-svn: 74463
|
| |
|
|
| |
llvm-svn: 74448
|
| |
|
|
|
|
|
|
| |
an individual exhaustive evaluation reflects only the exit value
implied by an individual exit, which may differ from the actual
exit value of the loop if there are other exits. This fixes PR4477.
llvm-svn: 74447
|
| |
|
|
|
|
|
| |
Not sure I understand how the temp register gets used,
but this fixes a bug and introduces no regressions.
llvm-svn: 74446
|
| |
|
|
| |
llvm-svn: 74445
|
| |
|
|
|
|
| |
the Z flag (i.e. eq and ne). Make ARMcmpZ commutative.
llvm-svn: 74423
|
| |
|
|
|
|
| |
After much back and forth, I decided to deviate from ARM design and split LDR into 4 instructions (r + imm12, r + imm8, r + r << imm12, constantpool). The advantage of this is 1) it follows the latest ARM technical manual, and 2) makes it easier to reduce the width of the instruction later. The down side is this creates more inconsistency between the two sub-targets. We should split ARM LDR instruction in a similar fashion later. I've added a README entry for this.
llvm-svn: 74420
|
| |
|
|
| |
llvm-svn: 74402
|
| |
|
|
|
|
| |
doesn't have an IV-based operand. This fixes PR4471.
llvm-svn: 74399
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when one of them can be converted to a trivial icmp and conditional
branch.
This addresses what is essentially a phase ordering problem.
SimplifyCFG knows how to do this transformation, but it doesn't do so
if the primary block has any instructions in it other than an icmp and
a branch. In the given testcase, the block contains other instructions,
however they are loop-invariant and can be hoisted. SimplifyCFG doesn't
have LoopInfo though, so it can't hoist them. And, it's important that
the blocks be merged before LoopRotation, as it doesn't support
multiple-exit loops.
llvm-svn: 74396
|
| |
|
|
|
|
|
|
| |
inserted to replace that value must dominate all of of the basic
blocks associated with the uses of the value in the PHI, not just
one of them.
llvm-svn: 74376
|
| |
|
|
|
|
| |
globals. This implements remat-constant.ll even without aggressive-remat.
llvm-svn: 74373
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
implementation primarily differs from the former in that the asmprinter
doesn't make a zillion decisions about whether or not something will be
RIP relative or not. Instead, those decisions are made by isel lowering
and propagated through to the asm printer. To achieve this, we:
1. Represent RIP relative addresses by setting the base of the X86 addr
mode to X86::RIP.
2. When ISel Lowering decides that it is safe to use RIP, it lowers to
X86ISD::WrapperRIP. When it is unsafe to use RIP, it lowers to
X86ISD::Wrapper as before.
3. This removes isRIPRel from X86ISelAddressMode, representing it with
a basereg of RIP instead.
4. The addressing mode matching logic in isel is greatly simplified.
5. The asmprinter is greatly simplified, notably the "NotRIPRel" predicate
passed through various printoperand routines is gone now.
6. The various symbol printing routines in asmprinter now no longer infer
when to emit (%rip), they just print the symbol.
I think this is a big improvement over the previous situation. It does have
two small caveats though: 1. I implemented a horrible "no-rip" modifier for
the inline asm "P" constraint modifier. This is a short term hack, there is
a much better, but more involved, solution. 2. I had to xfail an
-aggressive-remat testcase because it isn't handling the use of RIP in the
constant-pool reading instruction. This specific test is easy to fix without
-aggressive-remat, which I intend to do next.
llvm-svn: 74372
|
| |
|
|
| |
llvm-svn: 74371
|
| |
|
|
| |
llvm-svn: 74367
|
| |
|
|
|
|
| |
a narrow version and eor(i) does not.
llvm-svn: 74355
|
| |
|
|
| |
llvm-svn: 74353
|
| |
|
|
| |
llvm-svn: 74345
|
| |
|
|
| |
llvm-svn: 74337
|
| |
|
|
|
|
| |
independently as part of MC work.
llvm-svn: 74336
|
| |
|
|
| |
llvm-svn: 74322
|
| |
|
|
| |
llvm-svn: 74321
|
| |
|
|
| |
llvm-svn: 74306
|
| |
|
|
| |
llvm-svn: 74298
|
| |
|
|
| |
llvm-svn: 74295
|
| |
|
|
| |
llvm-svn: 74293
|