- Feb 17, 2012
-
-
Jakob Stoklund Olesen authored
This caused miscompilations on out-of-tree targets, and possibly i386 as well. I'll find some other way of hoisting %rip-relative loads from loops containing calls. llvm-svn: 150816
-
David Chisnall authored
Don't lazily allocate eh_frame. We're not lazily allocating things like the LSDA, which are only used when the eh frame is used, so this lazy allocation doesn't really make sense. Fix the type of eh_frame on Solaris so that Sun ld doesn't fail to combine them (thus making it impossible for the unwind library to find them and breaking exceptions). llvm-svn: 150814
-
David Chisnall authored
... and it's probably best to use the correct alignment, rather than just guessing that it's the same as the size. llvm-svn: 150813
-
David Chisnall authored
It turns out that putting an 8-byte symbol in a 4-byte section makes Solaris ld sulk. GNU ld is perfectly happy with it, which is worrying for a whole other set of reasons... Thanks to Anton, Duncan and Rafael for helping me track this down. Pointy hat to Rafael for introducing the bug in the first place. llvm-svn: 150811
-
Jia Liu authored
llvm-svn: 150805
-
Eric Christopher authored
llvm-svn: 150796
-
Craig Topper authored
llvm-svn: 150795
-
Nick Lewycky authored
useful to represent a variable that is const in the source but can't be constant in the IR because of a non-trivial constructor. If globalopt evaluates the constructor, and there was an invariant.start with no matching invariant.end possible, it will mark the global constant afterwards. llvm-svn: 150794
-
Akira Hatanaka authored
instructions to be emitted. llvm-svn: 150782
-
Bill Wendling authored
llvm-svn: 150780
-
Bill Wendling authored
llvm-svn: 150779
-
Lang Hames authored
llvm-svn: 150778
-
Jia Liu authored
llvm-svn: 150775
-
Chad Rosier authored
entend flag. llvm-svn: 150774
-
Lang Hames authored
llvm-svn: 150773
-
Lang Hames authored
llvm-svn: 150771
-
Lang Hames authored
Re-enable 150652 and 150654 - Make FPSCR non-reserved, and make MachineCSE bail on reserved registers. This *should* be safe as of r150786. llvm-svn: 150769
-
Lang Hames authored
llvm-svn: 150768
-
- Feb 16, 2012
-
-
Akira Hatanaka authored
llvm-svn: 150739
-
Chad Rosier authored
llvm-svn: 150737
-
Jakob Stoklund Olesen authored
Call clobbers are now represented with register mask operands. The regmask can easily represent the fact that xmm6 is call-preserved while ymm6 isn't. This is automatically computed by TableGen from the CalleeSavedRegs containing xmm6. llvm-svn: 150709
-
Jakob Stoklund Olesen authored
The different calling conventions and call-preserved registers are represented with regmask operands that are added dynamically. llvm-svn: 150708
-
Akira Hatanaka authored
llvm-svn: 150706
-
Benjamin Kramer authored
Disable machine copy propagation for now. It's known to be buggy (PR11940) and introduces subtle miscompiles in many places. llvm-svn: 150703
-
Benjamin Kramer authored
Turns out this isn't safe, because the code below depends on LHS and RHS having the same type. llvm-svn: 150695
-
Benjamin Kramer authored
llvm-svn: 150694
-
Benjamin Kramer authored
llvm-svn: 150690
-
Bill Wendling authored
llvm-svn: 150679
-
James Molloy authored
llvm-svn: 150670
-
James Molloy authored
Modify the algorithm when traversing the DAGCombiner's worklist to be O(log N) for all operations. This fixes a horrible worst case with lots of nodes where 99% of the time was being spent in std::remove. llvm-svn: 150669
-
NAKAMURA Takumi authored
With MSVCRT, prior checker missed emission of #INF and #NAN. FIXME: Checking should be simpler. llvm-svn: 150667
-
NAKAMURA Takumi authored
atof(3) might behave differently among platforms. llvm-svn: 150661
-
Lang Hames authored
llvm-svn: 150655
-
Lang Hames authored
llvm-svn: 150654
-
Lang Hames authored
llvm-svn: 150653
-
Eli Friedman authored
loop-rotate shouldn't hoist alloca instructions out of a loop. Patch by Patrik Hägglund, with slightly modified test. Issue reported by Patrik Hägglund on llvmdev. llvm-svn: 150642
-
Jakob Stoklund Olesen authored
Call instructions no longer have a list of 43 call-clobbered registers. Instead, they get a single register mask operand with a bit vector of call-preserved registers. This saves a lot of memory, 42 x 32 bytes = 1344 bytes per call instruction, and it speeds up building call instructions because those 43 imp-def operands no longer need to be added to use-def lists. (And removed and shifted and re-added for every explicit call operand). Passes like LiveVariables, LiveIntervals, RAGreedy, PEI, and BranchFolding are significantly faster because they can deal with call clobbers in bulk. Overall, clang -O2 is between 0% and 8% faster, uniformly distributed depending on call density in the compiled code. Debug builds using clang -O0 are 0% - 3% faster. I have verified that this patch doesn't change the assembly generated for the LLVM nightly test suite when building with -disable-copyprop and -disable-branch-fold. Branch folding behaves slightly differently in a few cases because call instructions have different hash values now. Copy propagation flushes its data structures when it crosses a register mask operand. This causes it to leave a few dead copies behind, on the order of 20 instruction across the entire nightly test suite, including SPEC. Fixing this properly would require the pass to use different data structures. llvm-svn: 150638
-
Jakob Stoklund Olesen authored
Don't attempt to move instructions with regmask operands. They are most likely calls anyway. llvm-svn: 150634
-
Andrew Trick authored
The existing framework for postra scheduling is library local. We want to keep it that way. Soon we will have a more general MachineScheduler interface. At that time, various bits will be exposed to targets. In the meantime, the VLIWPacketizer wants to use ScheduleDAGInstrs directly, so it needs to wrapped in a PIMPL to avoid exposing it to the target interface. llvm-svn: 150633
-
Bill Wendling authored
llvm-svn: 150632
-