- Mar 01, 2012
-
-
James Molloy authored
Fix a codegen fault in which log2 or exp2 could be dead-code eliminated even though they could have sideeffects. Only allow log2/exp2 to be converted to an intrinsic if they are declared "readnone". llvm-svn: 151807
-
Jakob Stoklund Olesen authored
Simply treat bundles as instructions. Spill code is inserted between bundles, never inside a bundle. Rewrite all operands in a bundle at once. Don't attempt and memory operand folding inside bundles. llvm-svn: 151787
-
Jakob Stoklund Olesen authored
This allows the function to be inlined, and makes it suitable for use in getInstructionIndex(). Also provide a const version. C++ is great for touch typing practice. llvm-svn: 151782
-
Lang Hames authored
While we're at it - don't copy vreg implicit operands while rematerializing. This fixes PR12138. llvm-svn: 151779
-
- Feb 29, 2012
-
-
Benjamin Kramer authored
LegalizeIntegerTypes: Reorder operations in the "big shift by small amount" optimization, making the lives of later passes easier. llvm-svn: 151722
-
Jakob Stoklund Olesen authored
This function does more or less the same as MI::readsWritesVirtualRegister(), but it supports bundles as well. It also determines if any constraint requires reading and writing operands to use the same register. Most clients want to know. Use the more modern MO.readsReg() instead of trying to sort out undefs and partial redefines. Stop supporting the extra full <imp-def> operand as an alternative to <def,undef> sub-register defines. llvm-svn: 151690
-
Jakob Stoklund Olesen authored
Extract a base class and provide four specific sub-classes for iterating over const/non-const bundles/instructions. This eliminates the mystery bool constructor argument. llvm-svn: 151684
-
- Feb 28, 2012
-
-
Lang Hames authored
methods are no longer needed now that LinearScan has gone away. (Contains tweaks trivialSpillEverywhere to enable the removal of getNewVRegs). llvm-svn: 151658
-
Evan Cheng authored
llvm-svn: 151645
-
Benjamin Kramer authored
llvm-svn: 151644
-
Benjamin Kramer authored
To avoid problems with zero shifts when getting the bits that move between words we use a trick: first shift the by amount-1, then do another shift by one. When amount is 0 (and size 32) we first shift by 31, then by one, instead of by 32. Also fix a latent bug that emitted the low and high words in the wrong order when shifting right. Fixes PR12113. llvm-svn: 151637
-
Daniel Dunbar authored
Revert r151623 "Some ARM implementaions, e.g. A-series, does return stack prediction. ...", it is breaking the Clang build during the Compiler-RT part. llvm-svn: 151630
-
Nadav Rotem authored
llvm-svn: 151627
-
Nadav Rotem authored
When the GEP index is a vector of pointers, the code that calculated the size of the element started from the vector type, and not the contained pointer type. As a result, instead of looking at the data element pointed by the vector, this code used the size of the vector. This works for 32bit members (on 32bit systems), but not for other types. Added code to peel the vector type and added a test. llvm-svn: 151626
-
Evan Cheng authored
the processor keeps a return addresses stack (RAS) which stores the address and the instruction execution state of the instruction after a function-call type branch instruction. Calling a "noreturn" function with normal call instructions (e.g. bl) can corrupt RAS and causes 100% return misprediction so LLVM should use a unconditional branch instead. i.e. mov lr, pc b _foo The "mov lr, pc" is issued in order to get proper backtrace. rdar://8979299 llvm-svn: 151623
-
Jakob Stoklund Olesen authored
Don't attempt to extend physreg live ranges across calls. <rdar://problem/10942095> llvm-svn: 151610
-
Jakob Stoklund Olesen authored
llvm-svn: 151607
-
Chad Rosier authored
llvm-svn: 151599
-
- Feb 27, 2012
-
-
Evan Cheng authored
%S5<def> = COPY %S0<kill> First clear def map of Q1, etc. No small test case available. llvm-svn: 151574
-
Jakob Stoklund Olesen authored
After the SlotIndex slot names were updated, it is possible to apply stricter checks to live intervals. Also treat bundles as bags of operands when checking live intervals. llvm-svn: 151531
-
- Feb 25, 2012
-
-
Lang Hames authored
uses of the vreg, since the old kills may no longer be valid. This was causing -verify-machineinstrs to complain about uses after kills, and could potentially have been causing subtle register allocation issues, but I haven't come across a test case yet. llvm-svn: 151425
-
Lang Hames authored
llvm-svn: 151417
-
- Feb 24, 2012
-
-
Jakob Stoklund Olesen authored
llvm-svn: 151396
-
Jakob Stoklund Olesen authored
This will limit all register classes to N registers in order to stress test register allocation. llvm-svn: 151379
-
Hal Finkel authored
This is necessary to support the existing ppc lowering code for indirect calls. Fixes PR12071. llvm-svn: 151373
-
Benjamin Kramer authored
llvm-svn: 151364
-
Nick Lewycky authored
llvm-svn: 151355
-
Andrew Trick authored
llvm-svn: 151348
-
Pete Cooper authored
Turn avx insert intrinsic calls into INSERT_SUBVECTOR DAG nodes and remove duplicate patterns for selecting the intrinsics llvm-svn: 151342
-
Eric Christopher authored
variable declaration as an argument because we want that address anyhow for our debug information. This seems to fix rdar://9965111, at least we have more debug information than before and from reading the assembly it appears to be the correct location. llvm-svn: 151335
-
Eric Christopher authored
llvm-svn: 151334
-
Bill Wendling authored
asm. <rdar://problem/10106006> llvm-svn: 151303
-
- Feb 23, 2012
-
-
Benjamin Kramer authored
llvm-svn: 151274
-
Benjamin Kramer authored
Rename it to LiveRegs to make it more clear what's stored inside. llvm-svn: 151273
-
Benjamin Kramer authored
Assuming that a single std::set node adds 3 control words, a bitvector can store (3*8+4)*8=224 registers in the allocated memory of a single element in the std::set (x86_64). Also we don't have to call malloc for every register added. llvm-svn: 151269
-
Jakob Stoklund Olesen authored
Before register allocation, instructions can be moved across calls in order to reduce register pressure. After register allocation, we don't gain a lot by moving callee-saved defs across calls. In fact, since the scheduler doesn't have a good idea how registers are used in the callee, it can't really make good scheduling decisions. This changes the schedule in two ways: 1. Latencies to call uses and defs are no longer accounted for, causing some random shuffling around calls. This isn't really a problem since those uses and defs are inaccurate proxies for what happens inside the callee. They don't represent registers used by the call instruction itself. 2. Instructions are no longer moved across calls. This didn't happen very often, and the scheduling decision was made on dubious information anyway. As with any scheduling change, benchmark numbers shift around a bit, but there is no positive or negative trend from this change. This makes the post-ra scheduler 5% faster for ARM targets. The secret motivation for this patch is the introduction of register mask operands representing call clobbers. The most efficient way of handling regmasks in ScheduleDAGInstrs is to model them as barriers for physreg live ranges, but not for virtreg live ranges. That's fine pre-ra, but post-ra it would have the same effect as this patch. llvm-svn: 151265
-
Benjamin Kramer authored
llvm-svn: 151252
-
Anton Korobeynikov authored
of instantiated C++ templates. Patch by Kristof Beyls! llvm-svn: 151250
-
Eric Christopher authored
llvm-svn: 151235
-
Eric Christopher authored
llvm-svn: 151234
-