diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-03-18 22:29:51 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-03-18 22:29:51 +0000 |
commit | c74ab2edfd76cd9b0e903082ad1c73d19ffb61bc (patch) | |
tree | 977638f169299d813a8f642cdb966981d0077c23 | |
parent | b68539d661beff0a8621004eab433e68e03c5003 (diff) | |
download | external_llvm-c74ab2edfd76cd9b0e903082ad1c73d19ffb61bc.zip external_llvm-c74ab2edfd76cd9b0e903082ad1c73d19ffb61bc.tar.gz external_llvm-c74ab2edfd76cd9b0e903082ad1c73d19ffb61bc.tar.bz2 |
Temporarily revert r48491. It's breaking test/CodeGen/X86/xorl.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48510 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 26 | ||||
-rw-r--r-- | test/CodeGen/X86/field-extract-use-trunc.ll | 3 | ||||
-rw-r--r-- | test/CodeGen/X86/xorl.ll | 85 |
3 files changed, 87 insertions, 27 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 737d966..acc00fd 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2374,32 +2374,6 @@ SDOperand DAGCombiner::visitSRA(SDNode *N) { DAG.getValueType(EVT)); } - // fold sra (shl X, m), result_size - n - // -> (sign_extend (trunc (shl X, result_size - n - m))) for - // result_size - n != m. If truncate is free for the target sext(shl) is - // likely to result in better code. - if (N0.getOpcode() == ISD::SHL) { - // Get the two constanst of the shifts, CN0 = m, CN = n. - const ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); - if (N01C && N1C) { - // Determine if the truncate type's bitsize would correspond to - // an integer type for this target. - unsigned VTValSize = MVT::getSizeInBits(VT); - MVT::ValueType TruncVT = MVT::getIntegerType(VTValSize - N1C->getValue()); - unsigned ShiftAmt = N1C->getValue() - N01C->getValue(); - - // If the shift wouldn't be a noop, the truncated type is an actual type, - // and the truncate is free, then proceed with the transform. - if (ShiftAmt != 0 && - !MVT::isExtendedVT(TruncVT) && TLI.isTruncateFree(VT, TruncVT)) { - SDOperand Amt = DAG.getConstant(ShiftAmt, TLI.getShiftAmountTy()); - SDOperand Shift = DAG.getNode(ISD::SRL, VT, N0.getOperand(0), Amt); - SDOperand Trunc = DAG.getNode(ISD::TRUNCATE, TruncVT, Shift); - return DAG.getNode(ISD::SIGN_EXTEND, N->getValueType(0), Trunc); - } - } - } - // fold (sra (sra x, c1), c2) -> (sra x, c1+c2) if (N1C && N0.getOpcode() == ISD::SRA) { if (ConstantSDNode *C1 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { diff --git a/test/CodeGen/X86/field-extract-use-trunc.ll b/test/CodeGen/X86/field-extract-use-trunc.ll index 63172b6..bb46bc5 100644 --- a/test/CodeGen/X86/field-extract-use-trunc.ll +++ b/test/CodeGen/X86/field-extract-use-trunc.ll @@ -1,5 +1,6 @@ ; RUN: llvm-as < %s | llc -march=x86 | grep sar | count 1 ; RUN: llvm-as < %s | llc -march=x86-64 | not grep sar +; XFAIL: * define i32 @test(i32 %f12) { %tmp7.25 = lshr i32 %f12, 16 @@ -36,4 +37,4 @@ define i16 @test6(i16 %f12) { %f11 = shl i16 %f12, 8 %tmp7.25 = ashr i16 %f11, 8 ret i16 %tmp7.25 -}
\ No newline at end of file +} diff --git a/test/CodeGen/X86/xorl.ll b/test/CodeGen/X86/xorl.ll new file mode 100644 index 0000000..1dc0cce --- /dev/null +++ b/test/CodeGen/X86/xorl.ll @@ -0,0 +1,85 @@ +; RUN: llvm-as < %s | llc | grep xorl | count 1 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" +target triple = "i386-apple-darwin9" + %struct.block_symbol = type { [3 x %struct.cgraph_rtl_info], %struct.object_block*, i64 } + %struct.rtx_def = type <{ i16, i8, i8, %struct.u }> + %struct.u = type { %struct.block_symbol } + %struct.cgraph_rtl_info = type { i32 } + %struct.object_block = type { %struct.section*, i32, i64, %struct.VEC_rtx_gc*, %struct.VEC_rtx_gc* } + %struct.section = type { %struct.unnamed_section } + %struct.VEC_rtx_base = type { i32, i32, [1 x %struct.rtx_def*] } + %struct.VEC_rtx_gc = type { %struct.VEC_rtx_base } + %struct.tree_common = type <{ %struct.tree_node*, %struct.tree_node*, %union.tree_ann_d*, i8, i8, i8, i8, i8, [3 x i8] }> + %struct.tree_complex = type { %struct.tree_common, %struct.tree_node*, %struct.tree_node* } + %struct.tree_node = type { %struct.tree_complex, [116 x i8] } + %struct.unnamed_section = type { %struct.cgraph_rtl_info, void (i8*)*, i8*, %struct.section* } + %union.tree_ann_d = type opaque + +define %struct.rtx_def* @expand_call() nounwind { +entry: + br i1 false, label %bb216, label %bb171 +bb171: ; preds = %entry + ret %struct.rtx_def* null +bb216: ; preds = %entry + br i1 false, label %bb336, label %bb222 +bb222: ; preds = %bb216 + ret %struct.rtx_def* null +bb336: ; preds = %bb216 + br i1 false, label %bb429, label %bb417 +bb417: ; preds = %bb336 + ret %struct.rtx_def* null +bb429: ; preds = %bb336 + br i1 false, label %bb713, label %bb493 +bb493: ; preds = %bb429 + ret %struct.rtx_def* null +bb713: ; preds = %bb429 + br i1 false, label %bb810, label %bb797 +bb797: ; preds = %bb713 + ret %struct.rtx_def* null +bb810: ; preds = %bb713 + br i1 false, label %bb822, label %bb815 +bb815: ; preds = %bb810 + ret %struct.rtx_def* null +bb822: ; preds = %bb810 + br label %bb1652.preheader +bb919: ; preds = %bb1652.preheader + ret %struct.rtx_def* null +bb1657: ; preds = %bb1652.preheader + br i1 false, label %bb1666, label %bb1652.preheader +bb1652.preheader: ; preds = %bb1657, %bb822 + br i1 false, label %bb1657, label %bb919 +bb1666: ; preds = %bb1657 + br i1 false, label %bb1815.preheader, label %bb1870 +bb1815.preheader: ; preds = %bb1666 + br i1 false, label %bb1693, label %bb1828 +bb1693: ; preds = %bb1815.preheader + br i1 false, label %bb1718, label %bb1703 +bb1703: ; preds = %bb1693 + ret %struct.rtx_def* null +bb1718: ; preds = %bb1693 + br i1 false, label %bb1741, label %bb1828 +bb1741: ; preds = %bb1718 + switch i8 0, label %bb1775 [ + i8 54, label %bb1798 + i8 58, label %bb1798 + i8 55, label %bb1798 + ] +bb1775: ; preds = %bb1741 + ret %struct.rtx_def* null +bb1798: ; preds = %bb1741, %bb1741, %bb1741 + %tmp1811 = add i32 0, 0 ; <i32> [#uses=1] + br label %bb1828 +bb1828: ; preds = %bb1798, %bb1718, %bb1815.preheader + %copy_to_evaluate_size.1.lcssa = phi i32 [ 0, %bb1815.preheader ], [ %tmp1811, %bb1798 ], [ 0, %bb1718 ] ; <i32> [#uses=1] + %tmp1830 = shl i32 %copy_to_evaluate_size.1.lcssa, 1 ; <i32> [#uses=1] + %tmp18301831 = sext i32 %tmp1830 to i64 ; <i64> [#uses=1] + %tmp1835 = icmp slt i64 %tmp18301831, 0 ; <i1> [#uses=1] + %tmp1835.not = xor i1 %tmp1835, true ; <i1> [#uses=1] + %bothcond6193 = and i1 %tmp1835.not, false ; <i1> [#uses=1] + br i1 %bothcond6193, label %bb1845, label %bb1870 +bb1845: ; preds = %bb1828 + ret %struct.rtx_def* null +bb1870: ; preds = %bb1828, %bb1666 + ret %struct.rtx_def* null +} |