http://llvm.org/bugs/show_bug.cgi?id=8731
Dan Gohman <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID | --- Comment #2 from Dan Gohman <[email protected]> 2010-12-06 11:11:44 CST --- (In reply to comment #1) > Dan's point is that first class values in general disable fastisel. No it wasn't. The concern I expressed was about optimization. Aggregate loads are never better than individual scalar loads, and can potentially be a lot worse. Fast-isel's present limitations are another reason for preferring scalar loads though. > However, > there is nothing that we can do about it in this case, as the ABI requires us > to return them. To return them yes, but there is an alternative to loading them: call void @_ZNSt4pairIPvxEC1ERKS0_RKx(%"struct.std::pair"* %retval, i8** %__x.addr, i64* %__y.addr) %0 = getelementptr %"struct.std::pair"* %retval, 0, 0 %1 = load i8** %0 %2 = getelementptr %"struct.std::pair"* %retval, 0, 1 %3 = load i64* %2 %4 = insertvalue %"struct.std::pair" undef, %1, 0 %5 = insertvalue %"struct.std::pair" %4, %3, 1 ret %"struct.std::pair" %5 I'm contemplating whether to consider it a bug in clang for not doing this, or to say that instcombine should expand aggregate loads into this form. -- 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 [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs
