r177819 - Make clang to mark static stack allocations with lifetime markers to enable a more aggressive stack coloring.

Ulrich Weigand Ulrich.Weigand at de.ibm.com
Mon Mar 25 11:27:49 PDT 2013


Nadav Rotem <nrotem at apple.com> wrote on 25.03.2013 19:22:00:

> Thanks for looking at this failure.  Does the IR look correct ?

No ... the arguments to printf are reversed already in the IR,
as output via clang -S -emit-llvm.

Before the change we had:

> -  %sumV.sroa.0.0.vec.extract = extractelement <8 x double> %add, i32 0
> -  %sumV.sroa.0.8.vec.extract = extractelement <8 x double> %add, i32 1
> -  %sumV.sroa.0.16.vec.extract = extractelement <8 x double> %add, i32 2
> -  %sumV.sroa.0.24.vec.extract = extractelement <8 x double> %add, i32 3
> -  %sumV.sroa.0.32.vec.extract = extractelement <8 x double> %add, i32 4
> -  %sumV.sroa.0.40.vec.extract = extractelement <8 x double> %add, i32 5
> -  %sumV.sroa.0.48.vec.extract = extractelement <8 x double> %add, i32 6
> -  %sumV.sroa.0.56.vec.extract = extractelement <8 x double> %add, i32 7
> -  %call.i = tail call signext i32 (i8*, ...)* @printf(i8* getelementptr
> inbounds ([25 x i8]* @.str, i64 0, i64 0), double
> %sumV.sroa.0.0.vec.extract, double %sumV.s
> roa.0.8.vec.extract, double %sumV.sroa.0.16.vec.extract, double
> %sumV.sroa.0.24.vec.extract, double %sumV.sroa.0.32.vec.extract, double
> %sumV.sroa.0.40.vec.extract,
> double %sumV.sroa.0.48.vec.extract, double %sumV.sroa.0.56.vec.extract)
#1

so the first printf element is extractelement <8 x double> %add, i32 0


After the change we have:

> +  %bitcast = extractelement <8 x double> %add, i32 7
> +  %11 = extractelement <8 x double> %add, i32 6
> +  %12 = extractelement <8 x double> %add, i32 5
> +  %13 = extractelement <8 x double> %add, i32 4
> +  %14 = extractelement <8 x double> %add, i32 3
> +  %15 = extractelement <8 x double> %add, i32 2
> +  %16 = extractelement <8 x double> %add, i32 1
> +  %17 = extractelement <8 x double> %add, i32 0
> +  %call.i = call signext i32 (i8*, ...)* @printf(i8* getelementptr
> inbounds ([25 x i8]* @.str, i64 0, i64 0), double %bitcast, double %11,
> double %12, double %13, d
> ouble %14, double %15, double %16, double %17) #1

so the first printf element is extractelement <8 x double> %add, i32 7


The PowerPC assembler output in both cases correctly reflects the IR.

Bye,
Ulrich




More information about the cfe-commits mailing list