From: Sanjay Patel Date: Tue, 25 Oct 2016 15:16:39 +0000 (+0000) Subject: [InstCombine] add test and code comment to show potentially misguided icmp trunc... X-Git-Tag: llvmorg-4.0.0-rc1~6354 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d59f7f9047fd7996ba6043004d4c190dae6d4611;p=platform%2Fupstream%2Fllvm.git [InstCombine] add test and code comment to show potentially misguided icmp trunc transform llvm-svn: 285075 --- diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index 7b59f86..9a31de4 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -1950,6 +1950,9 @@ Instruction *InstCombiner::foldICmpShlConstant(ICmpInst &Cmp, And, Constant::getNullValue(And->getType())); } + // FIXME: This transform can create illegal types. Use the DataLayout to + // decide when to try this? + // Transform (icmp pred iM (shl iM %v, N), C) // -> (icmp pred i(M-N) (trunc %v iM to i(M-N)), (trunc (C>>N)) // Transform the shl to a trunc if (trunc (C>>N)) has no loss and M-N. diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll index da5913e..57e02a4 100644 --- a/llvm/test/Transforms/InstCombine/icmp.ll +++ b/llvm/test/Transforms/InstCombine/icmp.ll @@ -1208,6 +1208,19 @@ define i1 @icmp_shl16(i32 %x) { ret i1 %cmp } +; FIXME: We shouldn't be creating illegal types like i15 in InstCombine. + +define i1 @icmp_shl17(i32 %x) { +; CHECK-LABEL: @icmp_shl17( +; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 %x to i15 +; CHECK-NEXT: [[CMP:%.*]] = icmp slt i15 [[TMP1]], 18 +; CHECK-NEXT: ret i1 [[CMP]] +; + %shl = shl i32 %x, 17 + %cmp = icmp slt i32 %shl, 2359296 + ret i1 %cmp +} + define <2 x i1> @icmp_shl16_vec(<2 x i32> %x) { ; CHECK-LABEL: @icmp_shl16_vec( ; CHECK-NEXT: [[TMP1:%.*]] = trunc <2 x i32> %x to <2 x i16>