[PATCH] D18305: [InstCombine] Ensure all undef operands are handled before binary instruction constant folding
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 21 06:55:48 PDT 2016
RKSimon updated this revision to Diff 51156.
RKSimon added a comment.
Updated so that we assert on unhandled binary instructions with undef operands.
At present we don't handle float binary instructions so I've split these off with a TODO comment instead of asserting - this patch is about clarity not adding the extra handling support.
Repository:
rL LLVM
http://reviews.llvm.org/D18305
Files:
lib/IR/ConstantFold.cpp
Index: lib/IR/ConstantFold.cpp
===================================================================
--- lib/IR/ConstantFold.cpp
+++ lib/IR/ConstantFold.cpp
@@ -998,9 +998,24 @@
return C1;
// undef << X -> 0
return Constant::getNullValue(C1->getType());
+ case Instruction::FAdd:
+ case Instruction::FSub:
+ case Instruction::FMul:
+ case Instruction::FDiv:
+ case Instruction::FRem:
+ // TODO: UNDEF handling for binary float instructions.
+ return nullptr;
+ default:
+ assert(!Instruction::isBinaryOp(Opcode) &&
+ "Unable to handle UNDEFs in this binary instruction");
+ return nullptr;
}
}
+ // At this point neither constant should be an UndefValue.
+ assert(!isa<UndefValue>(C1) && !isa<UndefValue>(C2) &&
+ "Unexpected UndefValue");
+
// Handle simplifications when the RHS is a constant int.
if (ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
switch (Opcode) {
@@ -1102,7 +1117,6 @@
return ConstantExpr::get(Opcode, C2, C1);
}
- // At this point we know neither constant is an UndefValue.
if (ConstantInt *CI1 = dyn_cast<ConstantInt>(C1)) {
if (ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
const APInt &C1V = CI1->getValue();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18305.51156.patch
Type: text/x-patch
Size: 1268 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160321/9f3bcee5/attachment.bin>
More information about the llvm-commits
mailing list