From f499c3547b55b769b9eba3d271f828ca9c279d50 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 27 Feb 2019 19:27:45 +0000 Subject: [PATCH] [InstCombine] add tests for add+ext+add; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355020 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/add.ll | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/test/Transforms/InstCombine/add.ll b/test/Transforms/InstCombine/add.ll index 008f5e2eb2d..f62d136ca0e 100644 --- a/test/Transforms/InstCombine/add.ll +++ b/test/Transforms/InstCombine/add.ll @@ -394,6 +394,92 @@ define i8 @add_nuw_signbit(i8 %x) { ret i8 %y } +define i32 @add_nsw_sext_add(i8 %x) { +; CHECK-LABEL: @add_nsw_sext_add( +; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[X:%.*]], 42 +; CHECK-NEXT: [[EXT:%.*]] = sext i8 [[ADD]] to i32 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[EXT]], 356 +; CHECK-NEXT: ret i32 [[R]] +; + %add = add nsw i8 %x, 42 + %ext = sext i8 %add to i32 + %r = add i32 %ext, 356 + ret i32 %r +} + +define i32 @add_nsw_sext_add_extra_use_1(i8 %x, i32* %p) { +; CHECK-LABEL: @add_nsw_sext_add_extra_use_1( +; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[X:%.*]], 42 +; CHECK-NEXT: [[EXT:%.*]] = sext i8 [[ADD]] to i32 +; CHECK-NEXT: store i32 [[EXT]], i32* [[P:%.*]], align 4 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[EXT]], 356 +; CHECK-NEXT: ret i32 [[R]] +; + %add = add nsw i8 %x, 42 + %ext = sext i8 %add to i32 + store i32 %ext, i32* %p + %r = add i32 %ext, 356 + ret i32 %r +} + +define <2 x i32> @add_nsw_sext_add_vec_extra_use_2(<2 x i8> %x, <2 x i8>* %p) { +; CHECK-LABEL: @add_nsw_sext_add_vec_extra_use_2( +; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i8> [[X:%.*]], +; CHECK-NEXT: store <2 x i8> [[ADD]], <2 x i8>* [[P:%.*]], align 2 +; CHECK-NEXT: [[EXT:%.*]] = sext <2 x i8> [[ADD]] to <2 x i32> +; CHECK-NEXT: [[R:%.*]] = add nsw <2 x i32> [[EXT]], +; CHECK-NEXT: ret <2 x i32> [[R]] +; + %add = add nsw <2 x i8> %x, + store <2 x i8> %add, <2 x i8>* %p + %ext = sext <2 x i8> %add to <2 x i32> + %r = add <2 x i32> %ext, + ret <2 x i32> %r +} + +define <2 x i32> @add_nuw_zext_add_vec(<2 x i16> %x) { +; CHECK-LABEL: @add_nuw_zext_add_vec( +; CHECK-NEXT: [[ADD:%.*]] = add nuw <2 x i16> [[X:%.*]], +; CHECK-NEXT: [[EXT:%.*]] = zext <2 x i16> [[ADD]] to <2 x i32> +; CHECK-NEXT: [[R:%.*]] = add nsw <2 x i32> [[EXT]], +; CHECK-NEXT: ret <2 x i32> [[R]] +; + %add = add nuw <2 x i16> %x, + %ext = zext <2 x i16> %add to <2 x i32> + %r = add <2 x i32> %ext, + ret <2 x i32> %r +} + +define i64 @add_nuw_zext_add_extra_use_1(i8 %x, i64* %p) { +; CHECK-LABEL: @add_nuw_zext_add_extra_use_1( +; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[X:%.*]], 42 +; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[ADD]] to i64 +; CHECK-NEXT: store i64 [[EXT]], i64* [[P:%.*]], align 4 +; CHECK-NEXT: [[R:%.*]] = add nuw nsw i64 [[EXT]], 356 +; CHECK-NEXT: ret i64 [[R]] +; + %add = add nuw i8 %x, 42 + %ext = zext i8 %add to i64 + store i64 %ext, i64* %p + %r = add i64 %ext, 356 + ret i64 %r +} + +define i64 @add_nuw_zext_add_extra_use_2(i8 %x, i8* %p) { +; CHECK-LABEL: @add_nuw_zext_add_extra_use_2( +; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[X:%.*]], 42 +; CHECK-NEXT: store i8 [[ADD]], i8* [[P:%.*]], align 1 +; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[ADD]] to i64 +; CHECK-NEXT: [[R:%.*]] = add nsw i64 [[EXT]], -356 +; CHECK-NEXT: ret i64 [[R]] +; + %add = add nuw i8 %x, 42 + store i8 %add, i8* %p + %ext = zext i8 %add to i64 + %r = add i64 %ext, -356 + ret i64 %r +} + define i1 @test21(i32 %x) { ; CHECK-LABEL: @test21( ; CHECK-NEXT: [[Y:%.*]] = icmp eq i32 [[X:%.*]], 119 -- 2.50.1