[llvm] r235079 - TRUNCATE constant folding - minor fix for rL233224
Patrik Hägglund H
patrik.h.hagglund at ericsson.com
Mon Apr 20 03:59:14 PDT 2015
Thanks for the fix. However, I now see a second failure (found by llvm-stress) caused by this commit:
> bin/llvm-stress -seed 13800 -size 300 | bin/llc -march=x86-64 -mcpu=corei7 -o /dev/null
llc: ../lib/CodeGen/SelectionDAG/SelectionDAG.cpp:762: void VerifySDNode(llvm::SDNode*): Assertion `I->getValueType() == N->getOperand(0).getValueType() && "Operands must all have the same type"' failed.
0 llc 0x0000000001f11831 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 44
1 llc 0x0000000001f11bad
2 llc 0x0000000001f10785
3 libpthread.so.0 0x00007f1bb1b69810
4 libc.so.6 0x00007f1bb1384755 gsignal + 53
5 libc.so.6 0x00007f1bb1385d31 abort + 385
6 libc.so.6 0x00007f1bb137d610 __assert_fail + 240
7 llc 0x0000000001d8b150
8 llc 0x0000000001d8b1ae llvm::SelectionDAG::InsertNode(llvm::SDNode*) + 54
9 llc 0x0000000001da65dd llvm::SelectionDAG::getNode(unsigned int, llvm::SDLoc, llvm::EVT, llvm::ArrayRef<llvm::SDValue>) + 1947
10 llc 0x0000000001d9a930 llvm::SelectionDAG::getNode(unsigned int, llvm::SDLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, bool, bool, bool) + 982
11 llc 0x0000000001e60042
12 llc 0x0000000001e61a1e
13 llc 0x0000000001e5f32f
14 llc 0x0000000001e4710d
15 llc 0x0000000001e4b695 llvm::SelectionDAG::LegalizeTypes() + 59
16 llc 0x0000000001e09802 llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 1360
17 llc 0x0000000001e08f86 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction const>, llvm::ilist_iterator<llvm::Instruction const>, bool&) + 234
18 llc 0x0000000001e0c615 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 2939
19 llc 0x0000000001e08124 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 998
20 llc 0x000000000141b7d3
21 llc 0x000000000180fd4b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 95
22 llc 0x0000000001b457d2 llvm::FPPassManager::runOnFunction(llvm::Function&) + 290
23 llc 0x0000000001b45942 llvm::FPPassManager::runOnModule(llvm::Module&) + 84
24 llc 0x0000000001b45c96
25 llc 0x0000000001b46332 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 250
26 llc 0x0000000001b46553 llvm::legacy::PassManager::run(llvm::Module&) + 39
27 llc 0x0000000000c2281d
28 llc 0x0000000000c21903 main + 242
29 libc.so.6 0x00007f1bb1370c16 __libc_start_main + 230
30 llc 0x0000000000c20e29
Stack dump:
0. Program arguments: bin/llc -march=x86-64 -mcpu=corei7 -o /dev/null
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@autogen_SD13800'
Abort (core dumped)
/Patrik Hägglund
-----Original Message-----
From: Simon Pilgrim [mailto:llvm-dev at redking.me.uk]
Sent: den 19 april 2015 23:08
To: Patrik Hägglund H
Cc: llvm-commits at cs.uiuc.edu
Subject: Re: [llvm] r235079 - TRUNCATE constant folding - minor fix for rL233224
Patrik, thanks for the test case. I've identified the issue - the commit is exposing more code that isn't correctly handling potential build_vector / scalar_to_vector truncation requirements, in this case in getScalarValueForVectorElement in X86ISelLowering.cpp
I'll push a patch with the test case shortly.
Simon.
> On 19 Apr 2015, at 19:55, Patrik Hägglund H <patrik.h.hagglund at ericsson.com> wrote:
>
> Hi Simon,
>
> This commit is causing a regression for the following testcase on x86 (generated by llvm-stress and then reduced):
>
> define void @autogen_SD13708(i32) {
> BB:
> %Shuff7 = shufflevector <8 x i32> zeroinitializer, <8 x i32>
> zeroinitializer, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 undef,
> i32 2, i32 4, i32 undef> br label %CF
>
> CF:
> %Tr = trunc <8 x i64> zeroinitializer to <8 x i32>
> %Shuff20 = shufflevector <8 x i32> %Shuff7, <8 x i32> %Tr, <8 x i32>
> <i32 13, i32 15, i32 1, i32 3, i32 5, i32 7, i32 undef, i32 11> br i1
> undef, label %CF, label %CF247
>
> CF247:
> %I171 = insertelement <8 x i32> %Shuff20, i32 %0, i32 0 br i1 undef,
> label %CF, label %CF247 }
>
>
> bin/llc -march=x86-64 -mcpu=corei7 foo.ll
> llc: ../lib/CodeGen/SelectionDAG/SelectionDAG.cpp:2989: llvm::SDValue llvm::SelectionDAG::getNode(unsigned int, llvm::SDLoc, llvm::EVT, llvm::SDValue): Assertion `VT.getSizeInBits() == Operand.getValueType().getSizeInBits() && "Cannot BITCAST between types of different sizes!"' failed.
> 0 llc 0x0000000001f1c7d5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 44
> 1 llc 0x0000000001f1cb51
> 2 llc 0x0000000001f1b729
> 3 libpthread.so.0 0x00007ff8431a8810
> 4 libc.so.6 0x00007ff8429c3755 gsignal + 53
> 5 libc.so.6 0x00007ff8429c4d31 abort + 385
> 6 libc.so.6 0x00007ff8429bc610 __assert_fail + 240
> 7 llc 0x0000000001da0fb3 llvm::SelectionDAG::getNode(unsigned int, llvm::SDLoc, llvm::EVT, llvm::SDValue) + 8345
> 8 llc 0x000000000146668f
> 9 llc 0x00000000014668fb
> 10 llc 0x000000000146c744
> 11 llc 0x0000000001473c93
> 12 llc 0x000000000147eb70
> 13 llc 0x00000000014b631b llvm::X86TargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const + 389
> 14 llc 0x0000000001d5988b
> 15 llc 0x0000000001d71358 llvm::SelectionDAG::Legalize() + 298
> 16 llc 0x0000000001e11f72 llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 2960
> 17 llc 0x0000000001e110b6 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction const>, llvm::ilist_iterator<llvm::Instruction const>, bool&) + 234
> 18 llc 0x0000000001e14745 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 2939
> 19 llc 0x0000000001e10254 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 998
> 20 llc 0x000000000141f675
> 21 llc 0x0000000001818007 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 95
> 22 llc 0x0000000001b4d64c llvm::FPPassManager::runOnFunction(llvm::Function&) + 290
> 23 llc 0x0000000001b4d7bc llvm::FPPassManager::runOnModule(llvm::Module&) + 84
> 24 llc 0x0000000001b4db10
> 25 llc 0x0000000001b4e1ac llvm::legacy::PassManagerImpl::run(llvm::Module&) + 250
> 26 llc 0x0000000001b4e3cd llvm::legacy::PassManager::run(llvm::Module&) + 39
> 27 llc 0x0000000000c26bf5
> 28 llc 0x0000000000c25cdb main + 242
> 29 libc.so.6 0x00007ff8429afc16 __libc_start_main + 230
> 30 llc 0x0000000000c25269
> Stack dump:
> 0. Program arguments: bin/llc -march=x86-64 -mcpu=corei7 /home/uabpath/tmp/foo.ll
> 1. Running pass 'Function Pass Manager' on module '/home/uabpath/tmp/foo.ll'.
> 2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@autogen_SD13708'
> Abort (core dumped)
>
> /Patrik Hägglund
>
>
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu
> [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Simon Pilgrim
> Sent: den 16 april 2015 10:21
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm] r235079 - TRUNCATE constant folding - minor fix for
> rL233224
>
> Author: rksimon
> Date: Thu Apr 16 03:21:09 2015
> New Revision: 235079
>
> URL: http://llvm.org/viewvc/llvm-project?rev=235079&view=rev
> Log:
> TRUNCATE constant folding - minor fix for rL233224
>
> Fix for test case found by James Molloy - TRUNCATE of constant build vectors can be more simply achieved by simply replacing with a new build vector node with the truncated value type - no need to touch the scalar operands at all.
>
> Added:
> llvm/trunk/test/CodeGen/AArch64/fold-constants.ll
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDA
> G/SelectionDAG.cpp?rev=235079&r1=235078&r2=235079&view=diff
> ======================================================================
> ========
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu Apr 16
> +++ 03:21:09 2015
> @@ -2851,13 +2851,16 @@ SDValue SelectionDAG::getNode(unsigned O
> // FIXME: Entirely reasonable to perform folding of other unary
> // operations here as the need arises.
> break;
> + case ISD::TRUNCATE:
> + // Constant build vector truncation can be done with the original scalar
> + // operands but with a new build vector with the truncated value type.
> + return getNode(ISD::BUILD_VECTOR, DL, VT, BV->ops());
> case ISD::FNEG:
> case ISD::FABS:
> case ISD::FCEIL:
> case ISD::FTRUNC:
> case ISD::FFLOOR:
> case ISD::FP_EXTEND:
> - case ISD::TRUNCATE:
> case ISD::UINT_TO_FP:
> case ISD::SINT_TO_FP: {
> // Let the above scalar folding handle the folding of each element.
>
> Added: llvm/trunk/test/CodeGen/AArch64/fold-constants.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/fo
> ld-constants.ll?rev=235079&view=auto
> ======================================================================
> ========
> --- llvm/trunk/test/CodeGen/AArch64/fold-constants.ll (added)
> +++ llvm/trunk/test/CodeGen/AArch64/fold-constants.ll Thu Apr 16
> +++ 03:21:09 2015
> @@ -0,0 +1,21 @@
> +; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s
> +
> +define i64 @dotests_616() {
> +; CHECK-LABEL: dotests_616
> +; CHECK: movi d0, #0000000000000000
> +; CHECK-NEXT: umov w8, v0.b[2]
> +; CHECK-NEXT: sbfx w8, w8, #0, #1
> +; CHECK-NEXT: fmov s0, w8
> +; CHECK-NEXT: fmov x0, d0
> +; CHECK-NEXT: ret
> +entry:
> + %0 = bitcast <2 x i64> zeroinitializer to <8 x i16>
> + %1 = and <8 x i16> zeroinitializer, %0
> + %2 = icmp ne <8 x i16> %1, zeroinitializer
> + %3 = extractelement <8 x i1> %2, i32 2
> + %vgetq_lane285 = sext i1 %3 to i16
> + %vset_lane = insertelement <4 x i16> undef, i16 %vgetq_lane285, i32
> +0
> + %4 = bitcast <4 x i16> %vset_lane to <1 x i64>
> + %vget_lane = extractelement <1 x i64> %4, i32 0
> + ret i64 %vget_lane
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list