aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/IntrinsicLowering.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/IntrinsicLowering.cpp')
-rw-r--r--lib/CodeGen/IntrinsicLowering.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp
index 85e8ba533f..0fe49ecedc 100644
--- a/lib/CodeGen/IntrinsicLowering.cpp
+++ b/lib/CodeGen/IntrinsicLowering.cpp
@@ -206,9 +206,14 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
break;
}
case Intrinsic::isunordered: {
- static Function *isunorderedFCache = 0;
- ReplaceCallWith("isunordered", CI, CI->op_begin()+1, CI->op_end(),
- Type::BoolTy, isunorderedFCache);
+ Value *L = CI->getOperand(1);
+ Value *R = CI->getOperand(2);
+
+ Value *LIsNan = new SetCondInst(Instruction::SetNE, L, L, "LIsNan", CI);
+ Value *RIsNan = new SetCondInst(Instruction::SetNE, R, R, "RIsNan", CI);
+ CI->replaceAllUsesWith(
+ BinaryOperator::create(Instruction::Or, LIsNan, RIsNan,
+ "isunordered", CI));
break;
}
}