aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2023-04-25 10:51:25 +0200
committerNikita Popov <npopov@redhat.com>2023-04-25 10:51:50 +0200
commita1677bda7975a0f690292587a04b9e053aacd1dc (patch)
treebfa15988a68b5648e8dd369d3685c4908e0222d4
parent5a4b7e1f2e547251ead718f5da67cd671a769169 (diff)
downloadllvm-a1677bda7975a0f690292587a04b9e053aacd1dc.tar.gz
llvm-a1677bda7975a0f690292587a04b9e053aacd1dc.tar.bz2
llvm-a1677bda7975a0f690292587a04b9e053aacd1dc.zip
[LICM] Add additional "free instruction" tests (NFC)
-rw-r--r--llvm/test/Transforms/LICM/sinking.ll52
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/sinking.ll b/llvm/test/Transforms/LICM/sinking.ll
index 153601ac642d..01eb3b72b973 100644
--- a/llvm/test/Transforms/LICM/sinking.ll
+++ b/llvm/test/Transforms/LICM/sinking.ll
@@ -1,6 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=licm -S -verify-memoryssa | FileCheck %s
+target datalayout = "n64"
declare i32 @strlen(ptr) readonly nounwind willreturn
@@ -997,6 +998,57 @@ out:
ret i32 %x
}
+declare void @use.i32(i32)
+declare void @use.i64(i64)
+
+define i32 @duplicate_freeze(i1 %c, i32 %x) {
+; CHECK-LABEL: @duplicate_freeze(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[FR:%.*]] = freeze i32 [[X:%.*]]
+; CHECK-NEXT: br label [[LOOP:%.*]]
+; CHECK: loop:
+; CHECK-NEXT: call void @use.i32(i32 [[FR]])
+; CHECK-NEXT: br i1 [[C:%.*]], label [[LOOP]], label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: [[FR_LE:%.*]] = freeze i32 [[X]]
+; CHECK-NEXT: ret i32 [[FR_LE]]
+;
+entry:
+ br label %loop
+
+loop:
+ %fr = freeze i32 %x
+ call void @use.i32(i32 %fr)
+ br i1 %c, label %loop, label %exit
+
+exit:
+ ret i32 %fr
+}
+
+define i64 @duplicate_ptrtoint(i1 %c, ptr %p) {
+; CHECK-LABEL: @duplicate_ptrtoint(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[PI:%.*]] = ptrtoint ptr [[P:%.*]] to i64
+; CHECK-NEXT: br label [[LOOP:%.*]]
+; CHECK: loop:
+; CHECK-NEXT: call void @use.i64(i64 [[PI]])
+; CHECK-NEXT: br i1 [[C:%.*]], label [[LOOP]], label [[EXIT:%.*]]
+; CHECK: exit:
+; CHECK-NEXT: [[PI_LE:%.*]] = ptrtoint ptr [[P]] to i64
+; CHECK-NEXT: ret i64 [[PI_LE]]
+;
+entry:
+ br label %loop
+
+loop:
+ %pi = ptrtoint ptr %p to i64
+ call void @use.i64(i64 %pi)
+ br i1 %c, label %loop, label %exit
+
+exit:
+ ret i64 %pi
+}
+
declare void @may_throw()
declare void @may_throw2()
declare i32 @__CxxFrameHandler3(...)