- Aug 30, 2012
-
-
NAKAMURA Takumi authored
llvm-svn: 162918
-
NAKAMURA Takumi authored
llvm-svn: 162917
-
NAKAMURA Takumi authored
[Tobias von Koch] What's happening here is that the CR6SET/CR6UNSET is breaking the chain of register copies glued to the function call (BL_SVR4 node). The scheduler then moves other instructions in between those and the function call, which isn't good! Right. That's the case where there is no chain of register copies before the call, so InFlag == 0... Attached is a new revision of the patch which should fix this for good. llvm-svn: 162916
-
NAKAMURA Takumi authored
llvm-svn: 162915
-
Michael Ilseman authored
llvm-svn: 162914
-
Benjamin Kramer authored
llvm-svn: 162913
-
Benjamin Kramer authored
The old PHI updating code in loop-rotate was replaced with SSAUpdater a while ago, it has no problems with comples PHIs. What had to be fixed is detecting whether a loop was already rotated and updating dominators when multiple exits were present. This change increases overall code size a bit, mostly due to additional loop unrolling opportunities. Passes test-suite and selfhost with -verify-dom-info. Fixes PR7447. Thanks to Andy for the input on the domtree updating code. llvm-svn: 162912
-
Benjamin Kramer authored
llvm-svn: 162911
-
Jakob Stoklund Olesen authored
When a MachineInstr is constructed, its implicit operands are added first, then the explicit operands are inserted before the implicits. MCInstrDesc has oprand flags like early clobber and operand ties that apply to the explicit operands. Don't look at those flags when the implicit operands are first added in the explicit operands's positions. llvm-svn: 162910
-
Alexey Samsonov authored
llvm-svn: 162907
-
Nadav Rotem authored
because C always rounds towards zero. Thanks Dirk and Ben. llvm-svn: 162899
-
Tim Northover authored
llvm-svn: 162898
-
Nadav Rotem authored
llvm-svn: 162896
-
Alexey Samsonov authored
code and allow better code reuse. Make the code a bit more conforming to LLVM code style. No functionality change. llvm-svn: 162895
-
Craig Topper authored
Add FMA to switch statement in VectorLegalizer::LegalizeOp so that it can be expanded when it isn't legal. llvm-svn: 162894
-
Craig Topper authored
llvm-svn: 162893
-
Craig Topper authored
llvm-svn: 162892
-
Bill Wendling authored
llvm-svn: 162888
-
Michael Liao authored
llvm-svn: 162885
-
Bill Wendling authored
llvm-svn: 162883
-
Will Dietz authored
Changes the hash result for strings containing characters with values >= 128, such as UTF8 strings (not normal ASCII). Changed mostly so we match other implementations. llvm-svn: 162882
-
Michael Liao authored
- The root cause is that target constant materialization in X86 fast-isel creates a PC-rel addressing which may overflow 32-bit range in non-Small code model if .rodata section is allocated too far away from code segment in MCJIT, which uses Large code model so far. - Follow the similar logic to fix non-Small code model in fast-isel by skipping non-Small code model. llvm-svn: 162881
-
Jakob Stoklund Olesen authored
llvm-svn: 162879
-
Jakob Stoklund Olesen authored
When there are multiple tied use-def pairs on an inline asm instruction, the tied uses must appear in the same order as the defs. It is possible to write an LLVM IR inline asm instruction that breaks this constraint, but there is no reason for a front end to emit the operands out of order. The gnu inline asm syntax specifies tied operands as a single read/write constraint "+r", so ouf of order operands are not possible. llvm-svn: 162878
-
Benjamin Kramer authored
Avoids surprises when someone uses LLVM_(UN)LIKELY with an integer. llvm-svn: 162877
-
Benjamin Kramer authored
Tombstones and full hash collisions are rare, mark the "empty" and "no collision" paths as likely. The bug in simplifycfg that prevented the hints from being picked during selfhost up was fixed recently :) llvm-svn: 162874
-
Benjamin Kramer authored
llvm-svn: 162873
-
Owen Anderson authored
Allow targets to specify a minimum supported NOP size when performing NOP padding. If the desired padding is smaller than the supported NOP size, we will enlarge the padding to make it work. llvm-svn: 162870
-
Jakob Stoklund Olesen authored
For normal instructions, isTied() is set automatically by addOperand(), based on MCInstrDesc, but inline asm has tied operands outside the descriptor. llvm-svn: 162869
-
- Aug 29, 2012
-
-
Andrew Trick authored
Patch by Michael Ilseman! This fixes SimplifyCFGOpt::FoldValueComparisonIntoPredecessors to preserve metata when folding conditional branches into switches. void foo(int x) { if (x == 0) bar(1); else if (__builtin_expect(x == 10, 1)) bar(2); else if (x == 20) bar(3); } CFG: B0 | \ | X0 B10 | \ | X10 B20 | \ E X20 Merge B0-B10: w(B0-X0) = w(B0-X0)*sum-weights(B10) = w(B0-X0) * (w(B10-X10) + w(B10-B20)) w(B0-X10) = w(B0-B10) * w(B10-X10) w(B0-B20) = w(B0-B10) * w(B10-B20) B0 __ | \ \ | X10 X0 B20 | \ E X20 Merge B0-B20: w(B0-X0) = w(B0-X0) * sum-weights(B20) = w(B0-X0) * (w(B20-E) + w(B20-X20)) w(B0-X10) = w(B0-X10) * sum-weights(B20) = ... w(B0-X20) = w(B0-B20) * w(B20-X20) w(B0-E) = w(B0-B20) * w(B20-E) llvm-svn: 162868
-
Andrew Trick authored
llvm-svn: 162867
-
Jakob Stoklund Olesen authored
Ordered memory operations are more constrained than volatile loads and stores because they must be ordered with respect to all other memory operations. llvm-svn: 162861
-
Jakob Stoklund Olesen authored
This means the same as LoadInst/StoreInst::isUnordered(), and implies !isVolatile(). Atomic loads and stored are also ordered, and this is the right method to check if it is safe to reorder memory operations. Ordered atomics can't be reordered wrt normal loads and stores, which is a stronger constraint than volatile. llvm-svn: 162859
-
Jakob Stoklund Olesen authored
It is technically allowed to move a normal load across a volatile load, but probably not a good idea. It is not allowed to move a load across an atomic load with Ordering > Monotonic, and we model those with MOVolatile as well. I recently removed the mayStore flag from atomic load instructions, so they don't need a pseudo-opcode. This patch makes up for the difference. llvm-svn: 162857
-
Michael Liao authored
llvm-svn: 162856
-
Bill Wendling authored
This lets the user run the program from a different directory and still have the .gcda files show up in the correct place. <rdar://problem/12179524> llvm-svn: 162855
-
Hal Finkel authored
We need to reserve space for the mandatory traceback fields, though leaving them as zero is appropriate for now. Although the ABI calls for these fields to be filled in fully, no compiler on Linux currently does this, and GDB does not read these fields. GDB uses the first word of zeroes during exception handling to find the end of the function and the size field, allowing it to compute the beginning of the function. DWARF information is used for everything else. We need the extra 8 bytes of pad so the size field is found in the right place. As a comparison, GCC fills in a few of the fields -- language, number of saved registers -- but ignores the rest. IBM's proprietary OSes do make use of the full traceback table facility. Patch by Bill Schmidt. llvm-svn: 162854
-
Bill Wendling authored
llvm-svn: 162851
-
Jakob Stoklund Olesen authored
The operands on an INLINEASM machine instruction are divided into groups headed by immediate flag operands. Verify this structure. Extract verifyTiedOperands(), and only call it for non-inlineasm instructions. llvm-svn: 162849
-
Eric Christopher authored
llvm-svn: 162848
-