Can you write a test showing the difference is the generated IR? Look
at the tests i clang/test/CodeGen for examples.

On 16 June 2014 13:46, Thomas Jablin <[email protected]> wrote:
> Hi,
> Please find enclosed a patch to resolve PR20018. According to the x86-64
> ABI, structures with both floating point and integer members are split
> between floating-point and general purpose registers, and consecutive 32-bit
> floats can be packed into a single floating point register. In variadic
> functions, clang writes out the state of the GP registers and FP registers
> to different regions in memory. A bug in the TargetInfo logic is causing
> llvm to try to read floating point arguments from the FP region of the
> stack. Specifically:
>
> 02593     llvm::Value *RegLoAddr = TyLo->isFloatingPointTy() ? FPAddr :
> GPAddr;
> 02594     llvm::Value *RegHiAddr = TyLo->isFloatingPointTy() ? GPAddr :
> FPAddr;
>
> Are checking if TyLo is a floating point type, however, two consecutive
> floating point fields will be represented as an floating point vector.
> Consequently, the correct code should be:
>
> 02593    llvm::Value *RegLoAddr = TyLo->isFPOrFPVectorTy() ? FPAddr :
> GPAddr;
> 02594    llvm::Value *RegHiAddr = TyLo->isFPOrFPVectorTy() ? GPAddr :
> FPAddr;
>
> The code on line 2623 is already checking for floating point vectors
> appropriately. I have also attached a simple test case named gpfpTest.c.
> Thanks.
> Tom
>
>
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to