This seems to be a backend bug rather than a frontend bug. The backend should 
be able to handle functions like `declare void @foo(i32 signext, i128 signext)` 
correctly but it currently doesn't. The backend has everything it needs 
(including the alignment) to handle it correctly though. The alignment can be 
found in ArgFlags.getOrigAlign() and can be checked with CCIfAlign.

It should be possible to fix this in a frontend-independent way by adding 
something like 'CCIfType<[i64], CCIfAlign<"8", CCAssignToRegWithShadow<[A0_64, 
A2_64, ...], [D12_64, D14_64, ...]>>>' but it also needs something to mark the 
skipped registers as being allocated so that subsequent arguments don't try to 
fill in the gaps this leaves behind.
Another possibility is adding a new action to tablegen (CCRegAlign?) which 
walks through the unallocated argument registers and marks them allocated until 
it finds a register with a suitable alignment.

Would you be willing to look into a backend fix for this?


http://reviews.llvm.org/D9198

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to