- Oct 15, 2013
-
-
Adrian Prantl authored
llvm-svn: 192731
-
Manman Ren authored
PR17309 llvm-svn: 192730
-
Michael Liao authored
- Type of index used in extract_vector_elt or insert_vector_elt supposes to be TLI.getVectorIdxTy() which is pointer type on most targets. It'd better to truncate (or zero-extend in case it's changed later) it to mask element type to guarantee they are matching instead of asserting that. llvm-svn: 192722
-
Michael Liao authored
- Lower signed division by constant powers-of-2 to target-independent DAG operators instead of target-dependent ones to support them better on targets where vector types are legal but shift operators on that types are illegal. E.g., on AVX, PSRAW is only available on <8 x i16> though <16 x i16> is a legal type. llvm-svn: 192721
-
Benjamin Kramer authored
llvm-svn: 192717
-
Pekka Jaaskelainen authored
llvm-svn: 192709
-
Pekka Jaaskelainen authored
MachineInstr::addOperand(). llvm-svn: 192707
-
Daniel Sanders authored
llvm-svn: 192699
-
Anders Waldenborg authored
Revert "Add AllTargetsBindings sublibrary" as it breaks cmake build on (atleast) windows and darwin. llvm-svn: 192697
-
Anders Waldenborg authored
This new library will be linked in when using the "all-targets" component and contains the LLVMInitializeAll* functions. This means that those functions will exist as real symbols in the shared library, and can therefore can be called from bindings that are using ffi the shared library. llvm-svn: 192690
-
Richard Sandiford authored
llvm-svn: 192681
-
Job Noorman authored
llvm-svn: 192678
-
Craig Topper authored
Remove x86_sse42_crc32_64_8 intrinsic. It has no functional difference from x86_sse42_crc32_32_8 and was not mapped to a clang builtin. I'm not even sure why this form of the instruction is even called out explicitly in the docs. Also add AutoUpgrade support to convert it into the other intrinsic with appropriate trunc and zext. llvm-svn: 192672
-
Andrew Trick authored
rdar:15221834 False AVX register dependencies cause 5x slowdown on flops-5/6 and significant slowdown on several others. This was blocking the switch to MI-Sched. llvm-svn: 192669
-
Akira Hatanaka authored
parts of the accumulators and gets expanded post-RA. llvm-svn: 192667
-
Akira Hatanaka authored
of relying on AddedComplexity. llvm-svn: 192665
-
Akira Hatanaka authored
llvm-svn: 192663
-
Akira Hatanaka authored
llvm-svn: 192662
-
Akira Hatanaka authored
llvm-svn: 192661
-
Akira Hatanaka authored
llvm-svn: 192660
-
Michael Gottesman authored
Thanks to Shuxin Yang for catching this. llvm-svn: 192637
-
Quentin Colombet authored
through bitcast, ptrtoint, and inttoptr instructions. This is valid only if the related instructions are in that same basic block, otherwise we may reference variables that were not live accross basic blocks resulting in undefined virtual registers. The bug was exposed when both SDISel and FastISel were used within the same function, i.e., one basic block is issued with FastISel and another with SDISel, as demonstrated with the testcase. <rdar://problem/15192473> llvm-svn: 192636
-
Andrew Trick authored
This pass is needed to break false dependencies. Without it, unlucky register assignment can result in wild (5x) swings in performance. This pass was trying to handle AVX but not getting it right. AVX doesn't have partial register defs, it has unused register reads in which the high bits of a source operand are copied into the unused bits of the dest. Fixing this requires conservative liveness analysis. This is awkard because the pass already has its own pseudo-liveness. However, proper liveness is expensive, and we would like to use a generic utility to compute it. The fix only invokes liveness on-demand. It is rare to detect a case that needs undef-read dependence breaking, but when it happens, it can be needed many times within a very large block. I think the existing heuristic which uses a register window of 16 is too conservative for loop-carried false dependencies. If the loop is a reduction. The out-of-order engine may be able to execute several loop iterations in parallel. However, I'll leave this tuning exercise for next time. llvm-svn: 192635
-
Andrew Trick authored
llvm-svn: 192634
-
Andrew Trick authored
llvm-svn: 192633
-
- Oct 14, 2013
-
-
Eric Christopher authored
a) x86-64 TLS has been documented b) the code path should use movq for the correct relocation to be generated. I've also added a fixme for the test case that we should improve the code generated, it should look something like is documented in the tls abi document. llvm-svn: 192631
-
Eric Christopher authored
llvm-svn: 192630
-
Eric Christopher authored
llvm-svn: 192629
-
Andrew Trick authored
Clobbering is exclusive not inclusive on register units. For liveness, we need to consider all the preserved registers. e.g. A regmask that clobbers YMM0 may preserve XMM0. Units are only clobbered when all super-registers are clobbered. llvm-svn: 192623
-
Andrew Trick authored
Some clients may add block live ins and may track liveness over a large scope. This guarantees an efficient implementation in all cases with no memory allocation/deallocation, independent of the number of target registers. It could be slightly less convenient but is fine in the expected case. llvm-svn: 192622
-
Andrew Trick authored
llvm-svn: 192621
-
Andrew Trick authored
llvm-svn: 192619
-
Manman Ren authored
Clean up creation of static member DIEs. We can create static member DIEs from two places, so we call getOrCreateStaticMemberDIE from the two places. getOrCreateStaticMemberDIE will get or create the context DIE first, then it will check if the DIE already exists, if not, we create the static member DIE and add it to the context. Creation of static member DIEs are handled in a similar way as subprogram DIEs. llvm-svn: 192618
-
David Blaikie authored
That wasn't confusing /at all/... llvm-svn: 192617
-
Will Dietz authored
Per original comment, the intention of this loop is to go ahead and break the critical edge (in order to sink this instruction) if there's reason to believe doing so might "unblock" the sinking of additional instructions that define registers used by this one. The idea is that if we have a few instructions to sink "together" breaking the edge might be worthwhile. This commit makes a few small changes to help better realize this goal: First, modify the loop to ignore registers defined by this instruction. We don't sink definitions of physical registers, and sinking an SSA definition isn't going to unblock an upstream instruction. Second, ignore uses of physical registers. Instructions that define physical registers are rejected for sinking, and so moving this one won't enable moving any defining instructions. As an added bonus, while virtual register use-def chains are generally small due to SSA goodness, iteration over the uses and definitions (used by hasOneNonDBGUse) for physical registers like EFLAGS can be rather expensive in practice. (This is the original reason for looking at this) Finally, to keep things simple continue to only consider this trick for registers that have a single use (via hasOneNonDBGUse), but to avoid spuriously breaking critical edges only do so if the definition resides in the same MBB and therefore this one directly blocks it from being sunk as well. If sinking them together is meant to be, let the iterative nature of this pass sink the definition into this block first. Update tests to accomodate this change, add new testcase where sinking avoids pipeline stalls. llvm-svn: 192608
-
Rafael Espindola authored
They were leftover from the old profiling support. Patch by Alastair Murray. llvm-svn: 192605
-
Rafael Espindola authored
llvm-svn: 192604
-
Chris Lattner authored
avoid a heap allocation when this is the case. llvm-svn: 192602
-
Evgeniy Stepanov authored
Currently MSan checks that arguments of *cvt* intrinsics are fully initialized. That's too much to ask: some of them only operate on lower half, or even quarter, of the input register. llvm-svn: 192599
-
Chad Rosier authored
llvm-svn: 192596
-