[PATCH] Fix Reassociate handling of constant in presence of undef float
Mehdi AMINI
mehdi.amini at apple.com
Thu Jan 15 00:25:26 PST 2015
Hi majnemer,
Just implemented the patch you suggested along with the test case.
REPOSITORY
rL LLVM
http://reviews.llvm.org/D6993
Files:
lib/Transforms/Scalar/Reassociate.cpp
test/Transforms/Reassociate/undef.ll
Index: lib/Transforms/Scalar/Reassociate.cpp
===================================================================
--- lib/Transforms/Scalar/Reassociate.cpp
+++ lib/Transforms/Scalar/Reassociate.cpp
@@ -897,10 +897,13 @@
/// version of the value is returned, and BI is left pointing at the instruction
/// that should be processed next by the reassociation pass.
static Value *NegateValue(Value *V, Instruction *BI) {
- if (ConstantFP *C = dyn_cast<ConstantFP>(V))
- return ConstantExpr::getFNeg(C);
- if (Constant *C = dyn_cast<Constant>(V))
+ if (Constant *C = dyn_cast<Constant>(V)) {
+ if (C->getType()->isFPOrFPVectorTy()) {
+ return ConstantExpr::getFNeg(C);
+ }
return ConstantExpr::getNeg(C);
+ }
+
// We are trying to expose opportunity for reassociation. One of the things
// that we want to do to achieve this is to push a negation as deep into an
Index: test/Transforms/Reassociate/undef.ll
===================================================================
--- /dev/null
+++ test/Transforms/Reassociate/undef.ll
@@ -0,0 +1,21 @@
+; RUN: opt -reassociate %s
+
+; Reassociate pass use to crash on these example
+
+
+define float @undef1() {
+wrapper_entry:
+ %0 = fadd fast float undef, undef
+ %1 = fsub fast float undef, %0
+ %2 = fadd fast float undef, %1
+ ret float %2
+}
+
+define void @undef2() {
+wrapper_entry:
+ %0 = fadd fast float undef, undef
+ %1 = fadd fast float %0, 1.000000e+00
+ %2 = fsub fast float %0, %1
+ %3 = fmul fast float %2, 2.000000e+00
+ unreachable
+}
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6993.18216.patch
Type: text/x-patch
Size: 1537 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150115/6ff1ff5f/attachment.bin>
More information about the llvm-commits
mailing list