From 272898a42505deb92a9efad778605f00ef2df1d2 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Thu, 19 Nov 2015 22:11:52 +0000 Subject: [PATCH] [InstCombine] add tests to show missing trunc optimizations git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253609 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/trunc.ll | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/test/Transforms/InstCombine/trunc.ll b/test/Transforms/InstCombine/trunc.ll index ee81cf8c3c5..7c30f100b3e 100644 --- a/test/Transforms/InstCombine/trunc.ll +++ b/test/Transforms/InstCombine/trunc.ll @@ -118,3 +118,49 @@ define i8 @test10(i32 %X) { ; 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 +} + -- 2.34.1