diff options
| author | Nikita Popov <npopov@redhat.com> | 2023-04-25 10:51:25 +0200 |
|---|---|---|
| committer | Nikita Popov <npopov@redhat.com> | 2023-04-25 10:51:50 +0200 |
| commit | a1677bda7975a0f690292587a04b9e053aacd1dc (patch) | |
| tree | bfa15988a68b5648e8dd369d3685c4908e0222d4 | |
| parent | 5a4b7e1f2e547251ead718f5da67cd671a769169 (diff) | |
| download | llvm-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.ll | 52 |
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(...) |
