]> granicus.if.org Git - llvm/commitdiff
[InstCombine] Add a test case for a weakness in canEvaluateZExtd. NFC
authorCraig Topper <craig.topper@intel.com>
Sun, 20 Aug 2017 21:38:28 +0000 (21:38 +0000)
committerCraig Topper <craig.topper@intel.com>
Sun, 20 Aug 2017 21:38:28 +0000 (21:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311303 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/cast.ll

index e852c0ab5af74275cc6c2975131704dfb6720b72..364337b9693752d409d6a4fe27875c2b37aded96 100644 (file)
@@ -1586,3 +1586,22 @@ define i64 @test94(i32 %a) {
   %4 = sext i8 %3 to i64
   ret i64 %4
 }
+
+; We should be able to remove the zext and trunc here.
+; TODO: This is currently blocked because we don't realize the 'and' has cleared the extra bits that would be shifted in widening the lshr.
+define i32 @test95(i32 %x) {
+; CHECK-LABEL: @test95(
+; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[X:%.*]] to i8
+; CHECK-NEXT:    [[TMP2:%.*]] = lshr i8 [[TMP1]], 6
+; CHECK-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], 2
+; CHECK-NEXT:    [[TMP4:%.*]] = or i8 [[TMP3]], 40
+; CHECK-NEXT:    [[TMP5:%.*]] = zext i8 [[TMP4]] to i32
+; CHECK-NEXT:    ret i32 [[TMP5]]
+;
+  %1 = trunc i32 %x to i8
+  %2 = lshr i8 %1, 6
+  %3 = and i8 %2, 2
+  %4 = or i8 %3, 40
+  %5 = zext i8 %4 to i32
+  ret i32 %5
+}