- Aug 20, 2012
-
-
Sebastian Pop authored
This patch allows us to use cmake to specify a cross compiler: target different than host. In particular, it moves LLVM_DEFAULT_TARGET_TRIPLE and TARGET_TRIPLE variables from cmake/config-ix.cmake to the toplevel CMakeLists.txt to make them available at configure time. Here is the command line that I have used to test my patches to create a Hexagon cross compiler hosted on x86: $ cmake -G Ninja -D LLVM_TARGETS_TO_BUILD:STRING=Hexagon -D TARGET_TRIPLE:STRING=hexagon-unknown-linux-gnu -D LLVM_DEFAULT_TARGET_TRIPLE:STRING=hexagon-unknown-linux-gnu -D LLVM_TARGET_ARCH:STRING=hexagon-unknown-linux-gnu .. $ ninja check llvm-svn: 162219
-
Sebastian Pop authored
The patch adds a missing case for the Hexagon target in cmake/config-ix.cmake. llvm-svn: 162218
-
Sebastian Pop authored
llvm-svn: 162217
-
Michael Liao authored
llvm-svn: 162214
-
Akira Hatanaka authored
Patch by Petar Jovanovic. llvm-svn: 162213
-
Benjamin Kramer authored
llvm-svn: 162201
-
Stepan Dyatkovskiy authored
llvm-svn: 162196
-
Stepan Dyatkovskiy authored
The DAGCombiner tries to optimise a BUILD_VECTOR by checking if it consists purely of get_vector_elts from one or two source vectors. If so, it either makes a concat_vectors node or a shufflevector node. However, it doesn't check the element type width of the underlying vector, so if you have this sequence: Node0: v4i16 = ... Node1: i32 = extract_vector_elt Node0 Node2: i32 = extract_vector_elt Node0 Node3: v16i8 = BUILD_VECTOR Node1, Node2, ... It will attempt to: Node0: v4i16 = ... NewNode1: v16i8 = concat_vectors Node0, ... Where this is actually invalid because the element width is completely different. This causes an assertion failure on DAG legalization stage. Fix: If output item type of BUILD_VECTOR differs from input item type. Make concat_vectors based on input element type and then bitcast it to the output vector type. So the case described above will transformed to: Node0: v4i16 = ... NewNode1: v8i16 = concat_vectors Node0, ... NewNode2: v16i8 = bitcast NewNode1 llvm-svn: 162195
-
Craig Topper authored
llvm-svn: 162194
-
Craig Topper authored
llvm-svn: 162193
-
Craig Topper authored
llvm-svn: 162192
-
- Aug 19, 2012
-
-
Nadav Rotem authored
this allows for better code generation. Added a new DAGCombine transformation to convert FMAX and FMIN to FMANC and FMINC, which are commutative. For example: movaps %xmm0, %xmm1 movsd LC(%rip), %xmm0 minsd %xmm1, %xmm0 becomes: minsd LC(%rip), %xmm0 llvm-svn: 162187
-
Benjamin Kramer authored
llvm-svn: 162186
-
Benjamin Kramer authored
llvm-svn: 162180
-
- Aug 18, 2012
-
-
Jakob Stoklund Olesen authored
These nodes are no longer needed because the peephole pass can fold CMOV+AND into ANDCC etc. llvm-svn: 162179
-
Craig Topper authored
Remove virtual from many methods. These methods replace methods in the base class, but the base class methods aren't virtual so it just increased call overhead. llvm-svn: 162178
-
Jakob Stoklund Olesen authored
This turns common i1 patterns into predicated instructions: (add (zext cc), x) -> (select cc (add x, 1), x) (add (sext cc), x) -> (select cc (add x, -1), x) For a function like: unsigned f(unsigned s, int x) { return s + (x>0); } We now produce: cmp r1, #0 it gt addgt.w r0, r0, #1 Instead of: movs r2, #0 cmp r1, #0 it gt movgt r2, #1 add r0, r2 llvm-svn: 162177
-
Jakob Stoklund Olesen authored
Add these transformations to the existing add/sub ones: (and (select cc, -1, c), x) -> (select cc, x, (and, x, c)) (or (select cc, 0, c), x) -> (select cc, x, (or, x, c)) (xor (select cc, 0, c), x) -> (select cc, x, (xor, x, c)) The selects can then be transformed to a single predicated instruction by peephole. This transformation will make it possible to eliminate the ISD::CAND, COR, and CXOR custom DAG nodes. llvm-svn: 162176
-
Benjamin Kramer authored
llvm-svn: 162175
-
Benjamin Kramer authored
llvm-svn: 162174
-
Benjamin Kramer authored
SimplifyLibcalls: Add fabs and trunc to the list of libcalls that are safe to shrink from double to float. llvm-svn: 162173
-
Nadav Rotem authored
Reapply r162160 with a fix: Optimize Arith->Trunc->SETCC sequence to allow better compare/branch code. llvm-svn: 162172
-
Anton Korobeynikov authored
Make sure the generic pattern is used. llvm-svn: 162170
-
Craig Topper authored
Refactor code a bit to reduce number of calls in the final compiled code. No functional change intended. llvm-svn: 162166
-
Craig Topper authored
llvm-svn: 162165
-
Nadav Rotem authored
llvm-svn: 162164
-
Nadav Rotem authored
arithmetic instructions. However, when small data types are used, a truncate node appears between the SETCC node and the arithmetic operation. This patch adds support for this pattern. Before: xorl %esi, %edi testb %dil, %dil setne %al ret After: xorb %dil, %sil setne %al ret rdar://12081007 llvm-svn: 162160
-
Eli Friedman authored
so other unexpected operations don't slip through. Based on patch by Logan Chien. PR11786/PR13186. llvm-svn: 162146
-
- Aug 17, 2012
-
-
Richard Smith authored
SSAUpdater was created and destroyed without being initialized. llvm-svn: 162137
-
Akira Hatanaka authored
llvm-svn: 162136
-
Akira Hatanaka authored
No new tests are added. All tests in ExecutionEngine/MCJIT that have been failing pass after this patch is applied (when "make check" is done on a mips board). Patch by Petar Jovanovic. llvm-svn: 162135
-
Bill Wendling authored
<rdar://problem/10545247> llvm-svn: 162131
-
Jakob Stoklund Olesen authored
PEI can't handle the pseudo-instructions. This can be removed when the pseudo-instructions are replaced by normal predicated instructions. Fixes PR13628. llvm-svn: 162130
-
Akira Hatanaka authored
Patch by Vladimir Medic. llvm-svn: 162124
-
Benjamin Kramer authored
The previous fix only checked for simple cycles, use a set to catch longer cycles too. Drop the broken check from the ObjectSizeOffsetEvaluator. The BoundsChecking pass doesn't have to deal with invalid IR like InstCombine does. llvm-svn: 162120
-
Bill Wendling authored
make it more consistent with its intended semantics. The `linker_private_weak_def_auto' linkage type was meant to automatically hide globals which never had their addresses taken. It has nothing to do with the `linker_private' linkage type, which outputs the symbols with a `l' (ell) prefix among other things. The intended semantic is more like the `linkonce_odr' linkage type. Change the name of the linkage type to `linkonce_odr_auto_hide'. And therefore changing the semantics so that it produces the correct output for the linker. Note: The old linkage name `linker_private_weak_def_auto' will still parse but is not a synonym for `linkonce_odr_auto_hide'. This should be removed in 4.0. <rdar://problem/11754934> llvm-svn: 162114
-
Rafael Espindola authored
multiple edges between two blocks is linear. If the caller is iterating all edges leaving a BB that would be a square time algorithm. It is more efficient to have the callers handle that case. Currently the only callers are: * GVN: already avoids the multiple edge case. * Verifier: could only hit this assert when looking at an invalid invoke. Since it already rejects the invoke, just avoid computing the dominance for it. llvm-svn: 162113
-
Jakob Stoklund Olesen authored
llvm-svn: 162107
-
Benjamin Kramer authored
TargetLowering: Use the large shift amount during legalize types. The legalizer may call us with an overly large type. llvm-svn: 162101
-
Jakob Stoklund Olesen authored
Increment the MBB iterator at the top of the loop to properly handle the current (and previous) instructions getting erased. This fixes PR13625. llvm-svn: 162099
-