[llvm] 5792c22 - Add test cases that are addressed by D76010

Juneyoung Lee via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 22 21:49:41 PDT 2020


Author: Juneyoung Lee
Date: 2020-03-23T13:49:29+09:00
New Revision: 5792c2236d5838f9563b39af20d9ad4b4f7675c3

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

LOG: Add test cases that are addressed by D76010

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstSimplify/freeze.ll b/llvm/test/Transforms/InstSimplify/freeze.ll
index e6085bf392bf..0e631426b647 100644
--- a/llvm/test/Transforms/InstSimplify/freeze.ll
+++ b/llvm/test/Transforms/InstSimplify/freeze.ll
@@ -19,6 +19,199 @@ define i32 @make_const() {
   ret i32 %x
 }
 
+define float @make_const2() {
+; CHECK-LABEL: @make_const2(
+; CHECK-NEXT:    [[X:%.*]] = freeze float 1.000000e+01
+; CHECK-NEXT:    ret float [[X]]
+;
+  %x = freeze float 10.0
+  ret float %x
+}
+
+ at glb = constant i32 0
+
+define i32* @make_const_glb() {
+; CHECK-LABEL: @make_const_glb(
+; CHECK-NEXT:    ret i32* @glb
+;
+  %k = freeze i32* @glb
+  ret i32* %k
+}
+
+define i32()* @make_const_fn() {
+; CHECK-LABEL: @make_const_fn(
+; CHECK-NEXT:    [[K:%.*]] = freeze i32 ()* @make_const
+; CHECK-NEXT:    ret i32 ()* [[K]]
+;
+  %k = freeze i32()* @make_const
+  ret i32()* %k
+}
+
+define i32* @make_const_null() {
+; CHECK-LABEL: @make_const_null(
+; CHECK-NEXT:    [[K:%.*]] = freeze i32* null
+; CHECK-NEXT:    ret i32* [[K]]
+;
+  %k = freeze i32* null
+  ret i32* %k
+}
+
+define <2 x i32> @constvector() {
+; CHECK-LABEL: @constvector(
+; CHECK-NEXT:    [[X:%.*]] = freeze <2 x i32> <i32 0, i32 1>
+; CHECK-NEXT:    ret <2 x i32> [[X]]
+;
+  %x = freeze <2 x i32> <i32 0, i32 1>
+  ret <2 x i32> %x
+}
+
+define <2 x i32> @constvector_noopt() {
+; CHECK-LABEL: @constvector_noopt(
+; CHECK-NEXT:    [[X:%.*]] = freeze <2 x i32> <i32 0, i32 undef>
+; CHECK-NEXT:    ret <2 x i32> [[X]]
+;
+  %x = freeze <2 x i32> <i32 0, i32 undef>
+  ret <2 x i32> %x
+}
+
+define void @alloca() {
+; CHECK-LABEL: @alloca(
+; CHECK-NEXT:    [[P:%.*]] = alloca i8
+; CHECK-NEXT:    [[Y:%.*]] = freeze i8* [[P]]
+; CHECK-NEXT:    call void @f3(i8* [[Y]])
+; CHECK-NEXT:    ret void
+;
+  %p = alloca i8
+  %y = freeze i8* %p
+  call void @f3(i8* %y)
+  ret void
+}
+
+define i8* @gep() {
+; CHECK-LABEL: @gep(
+; CHECK-NEXT:    [[P:%.*]] = alloca [4 x i8]
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr [4 x i8], [4 x i8]* [[P]], i32 0, i32 6
+; CHECK-NEXT:    [[Q2:%.*]] = freeze i8* [[Q]]
+; CHECK-NEXT:    ret i8* [[Q2]]
+;
+  %p = alloca [4 x i8]
+  %q = getelementptr [4 x i8], [4 x i8]* %p, i32 0, i32 6
+  %q2 = freeze i8* %q
+  ret i8* %q2
+}
+
+define i8* @gep_noopt(i32 %arg) {
+; CHECK-LABEL: @gep_noopt(
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr [4 x i8], [4 x i8]* null, i32 0, i32 [[ARG:%.*]]
+; CHECK-NEXT:    [[Q2:%.*]] = freeze i8* [[Q]]
+; CHECK-NEXT:    ret i8* [[Q2]]
+;
+  %q = getelementptr [4 x i8], [4 x i8]* null, i32 0, i32 %arg
+  %q2 = freeze i8* %q
+  ret i8* %q2
+}
+
+define i8* @gep_inbounds() {
+; CHECK-LABEL: @gep_inbounds(
+; CHECK-NEXT:    [[P:%.*]] = alloca [4 x i8]
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds [4 x i8], [4 x i8]* [[P]], i32 0, i32 0
+; CHECK-NEXT:    [[Q2:%.*]] = freeze i8* [[Q]]
+; CHECK-NEXT:    ret i8* [[Q2]]
+;
+  %p = alloca [4 x i8]
+  %q = getelementptr inbounds [4 x i8], [4 x i8]* %p, i32 0, i32 0
+  %q2 = freeze i8* %q
+  ret i8* %q2
+}
+
+define i8* @gep_inbounds_noopt(i32 %arg) {
+; CHECK-LABEL: @gep_inbounds_noopt(
+; CHECK-NEXT:    [[P:%.*]] = alloca [4 x i8]
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds [4 x i8], [4 x i8]* [[P]], i32 0, i32 [[ARG:%.*]]
+; CHECK-NEXT:    [[Q2:%.*]] = freeze i8* [[Q]]
+; CHECK-NEXT:    ret i8* [[Q2]]
+;
+  %p = alloca [4 x i8]
+  %q = getelementptr inbounds [4 x i8], [4 x i8]* %p, i32 0, i32 %arg
+  %q2 = freeze i8* %q
+  ret i8* %q2
+}
+
+define i32* @gep_inbounds_null() {
+; CHECK-LABEL: @gep_inbounds_null(
+; CHECK-NEXT:    [[K:%.*]] = freeze i32* null
+; CHECK-NEXT:    ret i32* [[K]]
+;
+  %p = getelementptr inbounds i32, i32* null, i32 0
+  %k = freeze i32* %p
+  ret i32* %k
+}
+
+define i32* @gep_inbounds_null_noopt(i32* %p) {
+; CHECK-LABEL: @gep_inbounds_null_noopt(
+; CHECK-NEXT:    [[K:%.*]] = freeze i32* [[P:%.*]]
+; CHECK-NEXT:    ret i32* [[K]]
+;
+  %q = getelementptr inbounds i32, i32* %p, i32 0
+  %k = freeze i32* %q
+  ret i32* %k
+}
+
+define i1 @icmp(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp(
+; CHECK-NEXT:    [[A_FR:%.*]] = freeze i32 [[A:%.*]]
+; CHECK-NEXT:    [[B_FR:%.*]] = freeze i32 [[B:%.*]]
+; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[A_FR]], [[B_FR]]
+; CHECK-NEXT:    ret i1 [[C]]
+;
+  %a.fr = freeze i32 %a
+  %b.fr = freeze i32 %b
+  %c = icmp eq i32 %a.fr, %b.fr
+  %c.fr = freeze i1 %c
+  ret i1 %c.fr
+}
+
+define i1 @icmp_noopt(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_noopt(
+; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[C_FR:%.*]] = freeze i1 [[C]]
+; CHECK-NEXT:    ret i1 [[C_FR]]
+;
+  %c = icmp eq i32 %a, %b
+  %c.fr = freeze i1 %c
+  ret i1 %c.fr
+}
+
+define i1 @fcmp(float %x, float %y) {
+; CHECK-LABEL: @fcmp(
+; CHECK-NEXT:    [[FX:%.*]] = freeze float [[X:%.*]]
+; CHECK-NEXT:    [[FY:%.*]] = freeze float [[Y:%.*]]
+; CHECK-NEXT:    [[C:%.*]] = fcmp oeq float [[FX]], [[FY]]
+; CHECK-NEXT:    [[FC:%.*]] = freeze i1 [[C]]
+; CHECK-NEXT:    ret i1 [[FC]]
+;
+  %fx = freeze float %x
+  %fy = freeze float %y
+  %c = fcmp oeq float %fx, %fy
+  %fc = freeze i1 %c
+  ret i1 %fc
+}
+
+define i1 @fcmp_noopt(float %x, float %y) {
+; CHECK-LABEL: @fcmp_noopt(
+; CHECK-NEXT:    [[FX:%.*]] = freeze float [[X:%.*]]
+; CHECK-NEXT:    [[FY:%.*]] = freeze float [[Y:%.*]]
+; CHECK-NEXT:    [[C:%.*]] = fcmp nnan oeq float [[FX]], [[FY]]
+; CHECK-NEXT:    [[FC:%.*]] = freeze i1 [[C]]
+; CHECK-NEXT:    ret i1 [[FC]]
+;
+  %fx = freeze float %x
+  %fy = freeze float %y
+  %c = fcmp nnan oeq float %fx, %fy
+  %fc = freeze i1 %c
+  ret i1 %fc
+}
+
 define i1 @brcond(i1 %c, i1 %c2) {
 ; CHECK-LABEL: @brcond(
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[A:%.*]], label [[B:%.*]]
@@ -40,6 +233,66 @@ B:
   ret i1 %f2
 }
 
+define i32 @phi(i1 %cond, i1 %cond2, i32 %a0, i32 %a1) {
+; CHECK-LABEL: @phi(
+; CHECK-NEXT:  ENTRY:
+; CHECK-NEXT:    [[A0_FR:%.*]] = freeze i32 [[A0:%.*]]
+; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
+; CHECK:       BB1:
+; CHECK-NEXT:    [[A1_FR:%.*]] = freeze i32 [[A1:%.*]]
+; CHECK-NEXT:    br i1 [[COND2:%.*]], label [[BB2]], label [[EXIT:%.*]]
+; CHECK:       BB2:
+; CHECK-NEXT:    [[PHI1:%.*]] = phi i32 [ [[A0_FR]], [[ENTRY:%.*]] ], [ [[A1_FR]], [[BB1]] ]
+; CHECK-NEXT:    br label [[EXIT]]
+; CHECK:       EXIT:
+; CHECK-NEXT:    [[PHI2:%.*]] = phi i32 [ [[A0_FR]], [[BB1]] ], [ [[PHI1]], [[BB2]] ]
+; CHECK-NEXT:    [[PHI2_FR:%.*]] = freeze i32 [[PHI2]]
+; CHECK-NEXT:    ret i32 [[PHI2_FR]]
+;
+ENTRY:
+  %a0.fr = freeze i32 %a0
+  br i1 %cond, label %BB1, label %BB2
+BB1:
+  %a1.fr = freeze i32 %a1
+  br i1 %cond2, label %BB2, label %EXIT
+BB2:
+  %phi1 = phi i32 [%a0.fr, %ENTRY], [%a1.fr, %BB1]
+  br label %EXIT
+EXIT:
+  %phi2 = phi i32 [%a0.fr, %BB1], [%phi1, %BB2]
+  %phi2.fr = freeze i32 %phi2
+  ret i32 %phi2.fr
+}
+
+define i32 @phi_noopt(i1 %cond, i1 %cond2, i32 %a0, i32 %a1) {
+; CHECK-LABEL: @phi_noopt(
+; CHECK-NEXT:  ENTRY:
+; CHECK-NEXT:    [[A0_FR:%.*]] = freeze i32 [[A0:%.*]]
+; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
+; CHECK:       BB1:
+; CHECK-NEXT:    br i1 [[COND2:%.*]], label [[BB2]], label [[EXIT:%.*]]
+; CHECK:       BB2:
+; CHECK-NEXT:    [[PHI1:%.*]] = phi i32 [ [[A0_FR]], [[ENTRY:%.*]] ], [ [[A1:%.*]], [[BB1]] ]
+; CHECK-NEXT:    br label [[EXIT]]
+; CHECK:       EXIT:
+; CHECK-NEXT:    [[PHI2:%.*]] = phi i32 [ [[A0_FR]], [[BB1]] ], [ [[PHI1]], [[BB2]] ]
+; CHECK-NEXT:    [[PHI2_FR:%.*]] = freeze i32 [[PHI2]]
+; CHECK-NEXT:    ret i32 [[PHI2_FR]]
+;
+ENTRY:
+  %a0.fr = freeze i32 %a0
+  br i1 %cond, label %BB1, label %BB2
+BB1:
+  br i1 %cond2, label %BB2, label %EXIT
+BB2:
+  %phi1 = phi i32 [%a0.fr, %ENTRY], [%a1, %BB1]
+  br label %EXIT
+EXIT:
+  %phi2 = phi i32 [%a0.fr, %BB1], [%phi1, %BB2]
+  %phi2.fr = freeze i32 %phi2
+  ret i32 %phi2.fr
+}
+
 define i32 @brcond_switch(i32 %x) {
 ; CHECK-LABEL: @brcond_switch(
 ; CHECK-NEXT:    switch i32 [[X:%.*]], label [[EXIT:%.*]] [
@@ -81,3 +334,4 @@ B:
 }
 declare void @f1(i1)
 declare void @f2()
+declare void @f3(i8*)


        


More information about the llvm-commits mailing list