[LLVMbugs] [Bug 8731] Clang generates load of struct value.

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Dec 6 09:11:44 PST 2010


http://llvm.org/bugs/show_bug.cgi?id=8731

Dan Gohman <gohman at apple.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |

--- Comment #2 from Dan Gohman <gohman at apple.com> 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.



More information about the llvm-bugs mailing list