299 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=sccp -S | FileCheck %s3 4define i1 @float.1.defaultenv(i1 %cmp) #0 {5; CHECK-LABEL: @float.1.defaultenv(6; CHECK-NEXT: entry:7; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]8; CHECK: if.true:9; CHECK-NEXT: br label [[END]]10; CHECK: end:11; CHECK-NEXT: ret i1 true12;13 14entry:15 br i1 %cmp, label %if.true, label %end16 17if.true:18 br label %end19 20end:21 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true]22 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #023 24 ret i1 %c25}26 27define i1 @float.1.maytrap(i1 %cmp) #0 {28; CHECK-LABEL: @float.1.maytrap(29; CHECK-NEXT: entry:30; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]31; CHECK: if.true:32; CHECK-NEXT: br label [[END]]33; CHECK: end:34; CHECK-NEXT: ret i1 true35;36 37entry:38 br i1 %cmp, label %if.true, label %end39 40if.true:41 br label %end42 43end:44 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true]45 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #046 47 ret i1 %c48}49 50define i1 @float.1.strict(i1 %cmp) #0 {51; CHECK-LABEL: @float.1.strict(52; CHECK-NEXT: entry:53; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]54; CHECK: if.true:55; CHECK-NEXT: br label [[END]]56; CHECK: end:57; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0:[0-9]+]]58; CHECK-NEXT: ret i1 true59;60 61entry:62 br i1 %cmp, label %if.true, label %end63 64if.true:65 br label %end66 67end:68 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true]69 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #070 71 ret i1 %c72}73 74define i1 @float.2.defaultenv(i1 %cmp) #0 {75; CHECK-LABEL: @float.2.defaultenv(76; CHECK-NEXT: entry:77; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]78; CHECK: if.true:79; CHECK-NEXT: br label [[END]]80; CHECK: end:81; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ]82; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0]]83; CHECK-NEXT: ret i1 [[C]]84;85 86entry:87 br i1 %cmp, label %if.true, label %end88 89if.true:90 br label %end91 92end:93 %p = phi float [ 1.0, %entry ], [ 2.0, %if.true]94 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #095 ret i1 %c96}97 98define i1 @float.2.maytrap(i1 %cmp) #0 {99; CHECK-LABEL: @float.2.maytrap(100; CHECK-NEXT: entry:101; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]102; CHECK: if.true:103; CHECK-NEXT: br label [[END]]104; CHECK: end:105; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ]106; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]]107; CHECK-NEXT: ret i1 [[C]]108;109 110entry:111 br i1 %cmp, label %if.true, label %end112 113if.true:114 br label %end115 116end:117 %p = phi float [ 1.0, %entry ], [ 2.0, %if.true]118 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #0119 ret i1 %c120}121 122define i1 @float.2.strict(i1 %cmp) #0 {123; CHECK-LABEL: @float.2.strict(124; CHECK-NEXT: entry:125; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]126; CHECK: if.true:127; CHECK-NEXT: br label [[END]]128; CHECK: end:129; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ 2.000000e+00, [[IF_TRUE]] ]130; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]]131; CHECK-NEXT: ret i1 [[C]]132;133 134entry:135 br i1 %cmp, label %if.true, label %end136 137if.true:138 br label %end139 140end:141 %p = phi float [ 1.0, %entry ], [ 2.0, %if.true]142 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #0143 ret i1 %c144}145 146define i1 @float.3.defaultenv(float %f, i1 %cmp) #0 {147; CHECK-LABEL: @float.3.defaultenv(148; CHECK-NEXT: entry:149; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]150; CHECK: if.true:151; CHECK-NEXT: br label [[END]]152; CHECK: end:153; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ]154; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0]]155; CHECK-NEXT: ret i1 [[C]]156;157 158entry:159 br i1 %cmp, label %if.true, label %end160 161if.true:162 br label %end163 164end:165 %p = phi float [ 1.0, %entry ], [ %f, %if.true]166 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.ignore") #0167 ret i1 %c168}169 170define i1 @float.3.maytrap(float %f, i1 %cmp) #0 {171; CHECK-LABEL: @float.3.maytrap(172; CHECK-NEXT: entry:173; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]174; CHECK: if.true:175; CHECK-NEXT: br label [[END]]176; CHECK: end:177; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ]178; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]]179; CHECK-NEXT: ret i1 [[C]]180;181 182entry:183 br i1 %cmp, label %if.true, label %end184 185if.true:186 br label %end187 188end:189 %p = phi float [ 1.0, %entry ], [ %f, %if.true]190 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.maytrap") #0191 ret i1 %c192}193 194define i1 @float.3.strict(float %f, i1 %cmp) #0 {195; CHECK-LABEL: @float.3.strict(196; CHECK-NEXT: entry:197; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]198; CHECK: if.true:199; CHECK-NEXT: br label [[END]]200; CHECK: end:201; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, [[ENTRY:%.*]] ], [ [[F:%.*]], [[IF_TRUE]] ]202; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[P]], float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]]203; CHECK-NEXT: ret i1 [[C]]204;205 206entry:207 br i1 %cmp, label %if.true, label %end208 209if.true:210 br label %end211 212end:213 %p = phi float [ 1.0, %entry ], [ %f, %if.true]214 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"ueq", metadata !"fpexcept.strict") #0215 ret i1 %c216}217 218define i1 @float.4_unreachable.defaultenv(float %f, i1 %cmp) #0 {219; CHECK-LABEL: @float.4_unreachable.defaultenv(220; CHECK-NEXT: entry:221; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]222; CHECK: if.true:223; CHECK-NEXT: br label [[END]]224; CHECK: end:225; CHECK-NEXT: ret i1 false226;227 228entry:229 br i1 %cmp, label %if.true, label %end230 231if.true:232 br label %end233 234dead:235 br label %end236 237end:238 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ]239 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.ignore") #0240 ret i1 %c241}242 243define i1 @float.4_unreachable.maytrap(float %f, i1 %cmp) #0 {244; CHECK-LABEL: @float.4_unreachable.maytrap(245; CHECK-NEXT: entry:246; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]247; CHECK: if.true:248; CHECK-NEXT: br label [[END]]249; CHECK: end:250; CHECK-NEXT: ret i1 false251;252 253entry:254 br i1 %cmp, label %if.true, label %end255 256if.true:257 br label %end258 259dead:260 br label %end261 262end:263 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ]264 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.maytrap") #0265 ret i1 %c266}267 268; FIXME: It's a shame we can't eliminate this fcmps here:269define i1 @float.4_unreachable.strict(float %f, i1 %cmp) #0 {270; CHECK-LABEL: @float.4_unreachable.strict(271; CHECK-NEXT: entry:272; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]273; CHECK: if.true:274; CHECK-NEXT: br label [[END]]275; CHECK: end:276; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.strict") #[[ATTR0]]277; CHECK-NEXT: ret i1 false278;279 280entry:281 br i1 %cmp, label %if.true, label %end282 283if.true:284 br label %end285 286dead:287 br label %end288 289end:290 %p = phi float [ 1.0, %entry ], [ 1.0, %if.true], [ %f, %dead ]291 %c = call i1 @llvm.experimental.constrained.fcmps.f32(float %p, float 1.0, metadata !"une", metadata !"fpexcept.strict") #0292 ret i1 %c293}294 295attributes #0 = { strictfp }296 297declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)298 299