[InstCombine] add tests to show missing trunc optimizations
authorSanjay Patel <spatel@rotateright.com>
Thu, 19 Nov 2015 22:11:52 +0000 (22:11 +0000)
committerSanjay Patel <spatel@rotateright.com>
Thu, 19 Nov 2015 22:11:52 +0000 (22:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253609 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/trunc.ll

index ee81cf8c3c5d87e18db375a829d55c73a461d9cf..7c30f100b3ef55d02cc955ca93553502d426bbb5 100644 (file)
@@ -118,3 +118,49 @@ define i8 @test10(i32 %X) {
 ; CHECK: and
 ; CHECK: ret
 }
 ; CHECK: and
 ; CHECK: ret
 }
+
+; PR25543
+; https://llvm.org/bugs/show_bug.cgi?id=25543
+; TODO: This could be extractelement.
+
+define i32 @trunc_bitcast1(<4 x i32> %v) {
+  %bc = bitcast <4 x i32> %v to i128
+  %shr = lshr i128 %bc, 32
+  %ext = trunc i128 %shr to i32
+  ret i32 %ext
+
+; CHECK-LABEL: @trunc_bitcast1(
+; CHECK-NEXT:  %bc = bitcast <4 x i32> %v to i128
+; CHECK-NEXT:  %shr = lshr i128 %bc, 32
+; CHECK-NEXT:  %ext = trunc i128 %shr to i32
+; CHECK-NEXT:  ret i32 %ext
+}
+
+; TODO: This could be bitcast + extractelement.
+
+define i32 @trunc_bitcast2(<2 x i64> %v) {
+  %bc = bitcast <2 x i64> %v to i128
+  %shr = lshr i128 %bc, 64
+  %ext = trunc i128 %shr to i32
+  ret i32 %ext
+
+; CHECK-LABEL: @trunc_bitcast2(
+; CHECK-NEXT:  %bc = bitcast <2 x i64> %v to i128
+; CHECK-NEXT:  %shr = lshr i128 %bc, 64
+; CHECK-NEXT:  %ext = trunc i128 %shr to i32
+; CHECK-NEXT:  ret i32 %ext
+}
+
+; TODO: The shift is optional. This could be extractelement.
+
+define i32 @trunc_bitcast3(<4 x i32> %v) {
+  %bc = bitcast <4 x i32> %v to i128
+  %ext = trunc i128 %bc to i32
+  ret i32 %ext
+
+; CHECK-LABEL: @trunc_bitcast3(
+; CHECK-NEXT:  %bc = bitcast <4 x i32> %v to i128
+; CHECK-NEXT:  %ext = trunc i128 %bc to i32
+; CHECK-NEXT:  ret i32 %ext
+}
+