[llvm] 4ace72e - [InstCombine] Add tests for freeze with !range and !align metadata (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 19 06:25:05 PST 2023


Author: Nikita Popov
Date: 2023-01-19T15:24:56+01:00
New Revision: 4ace72ee20199d616532e72184bd078cb737e058

URL: https://github.com/llvm/llvm-project/commit/4ace72ee20199d616532e72184bd078cb737e058
DIFF: https://github.com/llvm/llvm-project/commit/4ace72ee20199d616532e72184bd078cb737e058.diff

LOG: [InstCombine] Add tests for freeze with !range and !align metadata (NFC)

These are currently being miscompiled, see PR59888.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/freeze.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/freeze.ll b/llvm/test/Transforms/InstCombine/freeze.ll
index 50262a4aee084..5e87dd7c7a320 100644
--- a/llvm/test/Transforms/InstCombine/freeze.ll
+++ b/llvm/test/Transforms/InstCombine/freeze.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
 ; RUN: opt < %s -passes=instcombine -instcombine-infinite-loop-threshold=2 -S | FileCheck %s
 
 define i32 @fold(i32 %x) {
@@ -449,7 +449,7 @@ invoke.unwind:
 define i32 @freeze_callbr_use_after_phi(i1 %c) {
 ; CHECK-LABEL: @freeze_callbr_use_after_phi(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[X:%.*]] = callbr i32 asm sideeffect "", "=r"() #[[ATTR0:[0-9]+]]
+; CHECK-NEXT:    [[X:%.*]] = callbr i32 asm sideeffect "", "=r"() #[[ATTR1:[0-9]+]]
 ; CHECK-NEXT:    to label [[CALLBR_CONT:%.*]] []
 ; CHECK:       callbr.cont:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ 0, [[CALLBR_CONT]] ]
@@ -476,8 +476,8 @@ define i1 @combine_and_after_freezing_uses(i32 %x) {
 ; CHECK-LABEL: @combine_and_after_freezing_uses(
 ; CHECK-NEXT:    [[X_FR:%.*]] = freeze i32 [[X:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[X_FR]], 15
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 15
-; CHECK-NEXT:    ret i1 [[TMP2]]
+; CHECK-NEXT:    [[AND:%.*]] = icmp eq i32 [[TMP1]], 15
+; CHECK-NEXT:    ret i1 [[AND]]
 ;
   %and1 = and i32 %x, 4
   %cmp1 = icmp ne i32 %and1, 0
@@ -1100,6 +1100,43 @@ define i32 @freeze_call_with_range() {
   ret i32 %x.fr
 }
 
+declare i32 @llvm.ctpop.i32(i32)
+
+define i32 @freeze_ctpop(i32 %x) {
+; CHECK-LABEL: @freeze_ctpop(
+; CHECK-NEXT:    [[Y:%.*]] = lshr i32 2047, [[X:%.*]]
+; CHECK-NEXT:    [[Y_FR:%.*]] = freeze i32 [[Y]]
+; CHECK-NEXT:    [[CTPOP:%.*]] = call i32 @llvm.ctpop.i32(i32 [[Y_FR]]), !range [[RNG3:![0-9]+]]
+; CHECK-NEXT:    ret i32 [[CTPOP]]
+;
+  %y = lshr i32 2047, %x
+  %ctpop = call i32 @llvm.ctpop.i32(i32 %y)
+  %fr = freeze i32 %ctpop
+  ret i32 %fr
+}
+
+declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
+
+define ptr @freeze_ptrmask_align(ptr %p, i64 noundef %m) {
+; CHECK-LABEL: @freeze_ptrmask_align(
+; CHECK-NEXT:    [[P_FR:%.*]] = freeze ptr [[P:%.*]]
+; CHECK-NEXT:    [[MASK:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P_FR]], i64 [[M:%.*]]), !aligned !1
+; CHECK-NEXT:    ret ptr [[MASK]]
+;
+  %mask = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m), !aligned !{i64 4}
+  %fr =  freeze ptr %mask
+  ret ptr %fr
+}
+
 !0 = !{}
 !1 = !{i64 4}
 !2 = !{i32 0, i32 100}
+;.
+; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; CHECK: attributes #[[ATTR1]] = { nounwind }
+;.
+; CHECK: [[META0:![0-9]+]] = !{}
+; CHECK: [[META1:![0-9]+]] = !{i64 4}
+; CHECK: [[RNG2]] = !{i32 0, i32 100}
+; CHECK: [[RNG3]] = !{i32 0, i32 12}
+;.


        


More information about the llvm-commits mailing list