[llvm] a1677bd - [LICM] Add additional "free instruction" tests (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 25 01:52:00 PDT 2023


Author: Nikita Popov
Date: 2023-04-25T10:51:50+02:00
New Revision: a1677bda7975a0f690292587a04b9e053aacd1dc

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

LOG: [LICM] Add additional "free instruction" tests (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/LICM/sinking.ll

Removed: 
    


################################################################################
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(...)


        


More information about the llvm-commits mailing list