[PATCH] D155594: [InstCombine][NFC] Add tests for preserving !unreachable

Paweł Bylica via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 18 06:22:40 PDT 2023


chfast created this revision.
chfast added reviewers: spatel, goldstein.w.n, nikic.
Herald added a subscriber: StephenFan.
Herald added a project: All.
chfast requested review of this revision.
Herald added a project: LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D155594

Files:
  llvm/test/Transforms/InstCombine/select_meta.ll


Index: llvm/test/Transforms/InstCombine/select_meta.ll
===================================================================
--- llvm/test/Transforms/InstCombine/select_meta.ll
+++ llvm/test/Transforms/InstCombine/select_meta.ll
@@ -64,8 +64,8 @@
 
 define i64 @test43(i32 %a) nounwind {
 ; CHECK-LABEL: @test43(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 0)
-; CHECK-NEXT:    [[MAX:%.*]] = zext i32 [[TMP1]] to i64
+; CHECK-NEXT:    [[NARROW:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 0)
+; CHECK-NEXT:    [[MAX:%.*]] = zext i32 [[NARROW]] to i64
 ; CHECK-NEXT:    ret i64 [[MAX]]
 ;
   %a_ext = sext i32 %a to i64
@@ -316,10 +316,72 @@
   ret <2 x i32> %r
 }
 
+; TODO: The !unpredictable should be preserved.
+define i64 @unpredictable_select_add(i1 %cond, i64 %x, i64 %y) {
+; CHECK-LABEL: @unpredictable_select_add(
+; CHECK-NEXT:    [[ADD:%.*]] = select i1 [[COND:%.*]], i64 [[Y:%.*]], i64 0
+; CHECK-NEXT:    [[RET:%.*]] = add i64 [[ADD]], [[X:%.*]]
+; CHECK-NEXT:    ret i64 [[RET]]
+;
+  %add = add i64 %x, %y
+  %ret = select i1 %cond, i64 %add, i64 %x, !unpredictable !3
+  ret i64 %ret
+}
+
+; TODO: The !unpredictable should be preserved.
+define i64 @unpredictable_select_or(i1 %cond, i64 %x, i64 %y) {
+; CHECK-LABEL: @unpredictable_select_or(
+; CHECK-NEXT:    [[ADD:%.*]] = select i1 [[COND:%.*]], i64 [[X:%.*]], i64 0
+; CHECK-NEXT:    [[RET:%.*]] = or i64 [[ADD]], [[Y:%.*]]
+; CHECK-NEXT:    ret i64 [[RET]]
+;
+  %add = or i64 %x, %y
+  %ret = select i1 %cond, i64 %add, i64 %y, !unpredictable !3
+  ret i64 %ret
+}
+
+; TODO: The !unpredictable should be preserved.
+define i1 @unpredictable_logical_and_not_not(i1 %a, i1 %b) {
+; CHECK-LABEL: @unpredictable_logical_and_not_not(
+; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = xor i1 [[TMP1]], true
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %na = xor i1 %a, true
+  %nb = xor i1 %b, true
+  %r = select i1 %na, i1 %nb, i1 false, !unpredictable !3
+  ret i1 %r
+}
+
+; TODO: The !unpredictable should be preserved.
+define i1 @unpredictable_logical_or_not_not(i1 %a, i1 %b) {
+; CHECK-LABEL: @unpredictable_logical_or_not_not(
+; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[A:%.*]], i1 [[B:%.*]], i1 false
+; CHECK-NEXT:    [[R:%.*]] = xor i1 [[TMP1]], true
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %na = xor i1 %a, true
+  %nb = xor i1 %b, true
+  %r = select i1 %na, i1 true, i1 %nb, !unpredictable !3
+  ret i1 %r
+}
+
+; TODO: The !unpredictable should be preserved.
+define float @unpredictable_fmax(float %a, float %b) {
+; CHECK-LABEL: @unpredictable_fmax(
+; CHECK-NEXT:    [[C_INV:%.*]] = fcmp ole float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C_INV]], float [[B]], float [[A]]
+; CHECK-NEXT:    ret float [[R]]
+;
+  %c = fcmp ugt float %a, %b
+  %r = select i1 %c, float %a, float %b, !unpredictable !3
+  ret float %r
+}
 
 !1 = !{!"branch_weights", i32 2, i32 10}
 !2 = !{!"branch_weights", i32 3, i32 10}
+!3 = !{}
 
 ; CHECK:      !0 = !{!"branch_weights", i32 2, i32 10}
 ; CHECK-NEXT: !1 = !{!"branch_weights", i32 10, i32 2}
-
+; CHECK-NEXT: !2 = !{}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155594.541498.patch
Type: text/x-patch
Size: 3150 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230718/085fbfd6/attachment.bin>


More information about the llvm-commits mailing list