[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