diff --git a/llvm/lib/Transforms/Utils/SCCPSolver.cpp b/llvm/lib/Transforms/Utils/SCCPSolver.cpp --- a/llvm/lib/Transforms/Utils/SCCPSolver.cpp +++ b/llvm/lib/Transforms/Utils/SCCPSolver.cpp @@ -1191,6 +1191,8 @@ for (const Use &A : CB.args()) { if (A.get()->getType()->isStructTy()) return markOverdefined(&CB); // Can't handle struct args. + if (A.get()->getType()->isMetadataTy()) + continue; // Carried in CB, not allowed in Operands. ValueLatticeElement State = getValueState(A); if (State.isUnknownOrUndef()) diff --git a/llvm/test/Transforms/SCCP/strictfp-phis-fcmp.ll b/llvm/test/Transforms/SCCP/strictfp-phis-fcmp.ll --- a/llvm/test/Transforms/SCCP/strictfp-phis-fcmp.ll +++ b/llvm/test/Transforms/SCCP/strictfp-phis-fcmp.ll @@ -8,8 +8,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0:[0-9]+]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 true ; entry: @@ -32,8 +31,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 true ; entry: @@ -56,8 +54,8 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0:[0-9]+]] +; CHECK-NEXT: ret i1 true ; entry: @@ -224,8 +222,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.ignore") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: @@ -250,8 +247,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.maytrap") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: @@ -278,7 +274,7 @@ ; CHECK-NEXT: br label [[END]] ; CHECK: end: ; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.strict") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: diff --git a/llvm/test/Transforms/SCCP/strictfp-phis-fcmps.ll b/llvm/test/Transforms/SCCP/strictfp-phis-fcmps.ll --- a/llvm/test/Transforms/SCCP/strictfp-phis-fcmps.ll +++ b/llvm/test/Transforms/SCCP/strictfp-phis-fcmps.ll @@ -8,8 +8,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.ignore") #[[ATTR0:[0-9]+]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 true ; entry: @@ -32,8 +31,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.maytrap") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 true ; entry: @@ -56,8 +54,8 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"ueq", metadata !"fpexcept.strict") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; 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]+]] +; CHECK-NEXT: ret i1 true ; entry: @@ -224,8 +222,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.ignore") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: @@ -250,8 +247,7 @@ ; CHECK: if.true: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.maytrap") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: @@ -278,7 +274,7 @@ ; CHECK-NEXT: br label [[END]] ; CHECK: end: ; CHECK-NEXT: [[C:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float 1.000000e+00, float 1.000000e+00, metadata !"une", metadata !"fpexcept.strict") #[[ATTR0]] -; CHECK-NEXT: ret i1 [[C]] +; CHECK-NEXT: ret i1 false ; entry: