[llvm-commits] [PATCH]: set CR1EQ on PPC32 only when seeing floating var arg

Eric Christopher echristo at apple.com
Tue Aug 30 10:27:44 PDT 2011


I responded with an OK on the 26th…

-eric

On Aug 30, 2011, at 7:13 AM, Roman Divacky wrote:

> ping^2
> 
> On Wed, Aug 24, 2011 at 09:14:34PM +0200, Roman Divacky wrote:
>> Hi,
>> 
>> PPC32 formal arguments lowering is slightly broken, it sets CR1EQ bit
>> when the call is a vararg one. It should set the bit only with vararg
>> call that has floating point arguments in registers and unset the
>> bit otherwise. The attached patch fixes that + test.
>> 
>> This is normally just an optimization but it's very important in the
>> kernel where doing floating point stuff is lethal.
>> 
>> OK to commit?
>> 
>> thank you, roman
> 
> 
>> ; RUN: llc < %s | FileCheck %s
>> ; ModuleID = 'test.c'
>> target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32"
>> target triple = "powerpc-unknown-freebsd"
>> 
>> @.str = private unnamed_addr constant [4 x i8] c"%i\0A\00", align 1
>> @.str1 = private unnamed_addr constant [4 x i8] c"%f\0A\00", align 1
>> 
>> define void @foo() nounwind {
>> entry:
>> ; CHECK: crxor 6, 6, 6
>>  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), i32 1)
>> ; CHECK: creqv 6, 6, 6
>>  %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str1, i32 0, i32 0), double 1.100000e+00)
>>  ret void
>> }
>> 
>> declare i32 @printf(i8*, ...)
> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list