http://llvm.org/bugs/show_bug.cgi?id=13412
Bug #: 13412 Summary: Bad opt from inlining + instsimplify Product: libraries Version: trunk Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P Component: Global Analyses AssignedTo: unassignedb...@nondot.org ReportedBy: paul.robin...@am.sony.com CC: llvmbugs@cs.uiuc.edu Classification: Unclassified Created attachment 8930 --> http://llvm.org/bugs/attachment.cgi?id=8930 One possible patch The following module compiled at -O2 is incorrectly optimized down to an unconditional call to fail() and a "ret". It should optimize to just "ret". ===================================== $ cat testcase.cpp void fail(void); static int* second(int *a, int *b) { unsigned long size = b - a; if(size >= 2) { if(*a == *b) return a; } return b; } static bool first(int *a, int *b) { return (second(a, b) == b); } int main() { int i1[2] = {0, 0}; ((first(i1, i1)) ? (void)0 : fail()); return 0; } $ clang++ -O2 testcase.cpp -S -emit-llvm -o - ; ModuleID = 'testcase.cpp' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define i32 @main() uwtable { cond.end: tail call void @_Z4failv() ret i32 0 } declare void @_Z4failv() $ ===================================== The problem appears to be associated with instruction simplification during inlining. Because it's an interaction between optimizations, there are different ways to approach it. I've attached a patch to SimplifyICmpInst() that seems to work, by eliminating an assumption that a local object and an argument can't be equal. This assumption appears not to hold while you're in the middle of inlining. But, that's not the only possible approach. We could just not do simplification during function cloning, waiting until things are self-consistent enough for simplification to work, later on. Or we could do simplification, but avoid the problematic cases, for some hopefully sufficient definition of "problematic." Time to let the experts sort this out... -- Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug. _______________________________________________ LLVMbugs mailing list LLVMbugs@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs