[PATCH] [MIPS] fix extension of integer types (function calls)
daniel.sanders at imgtec.com
Tue Apr 28 03:14:42 PDT 2015
In http://reviews.llvm.org/D9198#162493, @spetrovic wrote:
> There are two solutions for i32 signext problem. First, i32 argument pass directly (in that case i32 will be sign extended) this fix is in MIPS part.
> Second solution is fix in common code as I mentioned (CGCall.cpp file, ConstructAttributeList function). This would required new hook in TargetInfo. I think first solution is better for this problem.
I agree that the first solution is the better approach but it shouldn't be passed direct. That would cause the backend to sign-extend on the callee side as well as the caller side. This happens because directly passed arguments have undefined upper bits and the operations sometimes (e.g. comparisons, shifts, etc.) require a sign/zero extension. It should be passed signext.
More information about the cfe-commits