From: Nikita Popov Date: Sat, 1 Jun 2019 09:40:09 +0000 (+0000) Subject: [IndVarSimplify] Add additional PR33181 tests; NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a3372ba9d18b40031eb9db95fff9b42fb3343643;p=llvm [IndVarSimplify] Add additional PR33181 tests; NFC Two more tests with a switch to a dynamically dead IV, with poison occuring on the first or second iteration. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362291 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/IndVarSimplify/pr31181.ll b/test/Transforms/IndVarSimplify/lftr-pr31181.ll similarity index 72% rename from test/Transforms/IndVarSimplify/pr31181.ll rename to test/Transforms/IndVarSimplify/lftr-pr31181.ll index 453bb841929..8316d8dbce2 100644 --- a/test/Transforms/IndVarSimplify/pr31181.ll +++ b/test/Transforms/IndVarSimplify/lftr-pr31181.ll @@ -180,8 +180,8 @@ exit: ; Adopted from D30446. ; We switch from %iv to %iv2 and need to change nsw to nuw in the process. -define i32 @switch_to_different_iv_pos_inc(i32* %ptr, i1 %always_false) { -; CHECK-LABEL: @switch_to_different_iv_pos_inc( +define i32 @switch_to_different_iv_post_inc(i32* %ptr, i1 %always_false) { +; CHECK-LABEL: @switch_to_different_iv_post_inc( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[FOR_COND:%.*]] ; CHECK: for.cond: @@ -215,7 +215,7 @@ never_taken: always_taken: %iv.inc = add nsw i32 %iv, 1 - %iv2.inc = add nsw i32 %iv2, 1 + %iv2.inc = add nuw nsw i32 %iv2, 1 %cmp = icmp slt i32 %iv, 20 br i1 %cmp, label %for.cond, label %for.end @@ -266,9 +266,95 @@ never_taken: always_taken: %iv.inc = add nsw i32 %iv, 1 - %iv2.inc = add nsw i32 %iv2, 1 + %iv2.inc = add nuw nsw i32 %iv2, 1 br label %for.cond for.end: ret i32 0 } + +define i32 @switch_to_different_iv_first_poison(i32* %ptr, i1 %always_false) { +; CHECK-LABEL: @switch_to_different_iv_first_poison( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[FOR_COND:%.*]] +; CHECK: for.cond: +; CHECK-NEXT: [[IV2:%.*]] = phi i32 [ -1, [[ENTRY:%.*]] ], [ [[IV2_INC:%.*]], [[ALWAYS_TAKEN:%.*]] ] +; CHECK-NEXT: [[IV:%.*]] = phi i32 [ -2147483648, [[ENTRY]] ], [ [[IV_INC:%.*]], [[ALWAYS_TAKEN]] ] +; CHECK-NEXT: store i32 [[IV]], i32* [[PTR:%.*]] +; CHECK-NEXT: br i1 [[ALWAYS_FALSE:%.*]], label [[NEVER_TAKEN:%.*]], label [[ALWAYS_TAKEN]] +; CHECK: never_taken: +; CHECK-NEXT: store volatile i32 [[IV2]], i32* [[PTR]] +; CHECK-NEXT: br label [[ALWAYS_TAKEN]] +; CHECK: always_taken: +; CHECK-NEXT: [[IV2_INC]] = add nuw nsw i32 [[IV2]], 1 +; CHECK-NEXT: [[IV_INC]] = add nsw i32 [[IV]], 1 +; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[IV2_INC]], -2147483628 +; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND]], label [[FOR_END:%.*]] +; CHECK: for.end: +; CHECK-NEXT: ret i32 0 +; +entry: + br label %for.cond + +for.cond: + %iv2 = phi i32 [ -1, %entry ], [ %iv2.inc, %always_taken ] + %iv = phi i32 [ -2147483648, %entry ], [ %iv.inc, %always_taken ] + store i32 %iv, i32* %ptr + br i1 %always_false, label %never_taken, label %always_taken + +never_taken: + store volatile i32 %iv2, i32* %ptr + br label %always_taken + +always_taken: + %iv2.inc = add nuw nsw i32 %iv2, 1 + %iv.inc = add nsw i32 %iv, 1 + %cmp = icmp slt i32 %iv, 20 + br i1 %cmp, label %for.cond, label %for.end + +for.end: + ret i32 0 +} + +define i32 @switch_to_different_iv_second_poison(i32* %ptr, i1 %always_false) { +; CHECK-LABEL: @switch_to_different_iv_second_poison( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[FOR_COND:%.*]] +; CHECK: for.cond: +; CHECK-NEXT: [[IV2:%.*]] = phi i32 [ -2, [[ENTRY:%.*]] ], [ [[IV2_INC:%.*]], [[ALWAYS_TAKEN:%.*]] ] +; CHECK-NEXT: [[IV:%.*]] = phi i32 [ -2147483648, [[ENTRY]] ], [ [[IV_INC:%.*]], [[ALWAYS_TAKEN]] ] +; CHECK-NEXT: store i32 [[IV]], i32* [[PTR:%.*]] +; CHECK-NEXT: br i1 [[ALWAYS_FALSE:%.*]], label [[NEVER_TAKEN:%.*]], label [[ALWAYS_TAKEN]] +; CHECK: never_taken: +; CHECK-NEXT: store volatile i32 [[IV2]], i32* [[PTR]] +; CHECK-NEXT: br label [[ALWAYS_TAKEN]] +; CHECK: always_taken: +; CHECK-NEXT: [[IV2_INC]] = add nuw nsw i32 [[IV2]], 1 +; CHECK-NEXT: [[IV_INC]] = add nsw i32 [[IV]], 1 +; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[IV2_INC]], -2147483629 +; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND]], label [[FOR_END:%.*]] +; CHECK: for.end: +; CHECK-NEXT: ret i32 0 +; +entry: + br label %for.cond + +for.cond: + %iv2 = phi i32 [ -2, %entry ], [ %iv2.inc, %always_taken ] + %iv = phi i32 [ -2147483648, %entry ], [ %iv.inc, %always_taken ] + store i32 %iv, i32* %ptr + br i1 %always_false, label %never_taken, label %always_taken + +never_taken: + store volatile i32 %iv2, i32* %ptr + br label %always_taken + +always_taken: + %iv2.inc = add nuw nsw i32 %iv2, 1 + %iv.inc = add nsw i32 %iv, 1 + %cmp = icmp slt i32 %iv, 20 + br i1 %cmp, label %for.cond, label %for.end + +for.end: + ret i32 0 +}