Index: llvm/lib/Transforms/InstCombine/InstructionCombining.cpp =================================================================== --- llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -3803,7 +3803,8 @@ // poison. Use *MaybePoisonOperand = nullptr; for (Use &U : OrigOpInst->operands()) { - if (isGuaranteedNotToBeUndefOrPoison(U.get())) + if (isa(U.get()) || + isGuaranteedNotToBeUndefOrPoison(U.get())) continue; if (!MaybePoisonOperand) MaybePoisonOperand = &U; Index: llvm/test/Transforms/InstCombine/freeze-fp-ops.ll =================================================================== --- llvm/test/Transforms/InstCombine/freeze-fp-ops.ll +++ llvm/test/Transforms/InstCombine/freeze-fp-ops.ll @@ -508,9 +508,9 @@ define float @freeze_fptrunc_round(double %arg0) { ; CHECK-LABEL: @freeze_fptrunc_round( -; CHECK-NEXT: [[OP:%.*]] = call float @llvm.fptrunc.round.f32.f64(double [[ARG0:%.*]], metadata !"round.downward") -; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[OP]] -; CHECK-NEXT: ret float [[FREEZE]] +; CHECK-NEXT: [[ARG0_FR:%.*]] = freeze double [[ARG0:%.*]] +; CHECK-NEXT: [[OP:%.*]] = call float @llvm.fptrunc.round.f32.f64(double [[ARG0_FR]], metadata !"round.downward") +; CHECK-NEXT: ret float [[OP]] ; %op = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward") %freeze = freeze float %op