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:10:40 PDT 2013


Nadav,

this commit causes a testsuite failure in
SingleSource/UnitTests/Vector/sumarray-dbl on powerpc64-linux.   The test
case is supposed to output:
488862 490096 491331 492566 493800 495035 496269 497504
but after this commit it outputs instead:
497504 496269 495035 493800 492566 491331 490096 488862
so the order of the output number is exactly reversed.

Looking at the differences in the generated .ll files, it seems that there
is actually no change in computing the values, it's simply that when
generating the printf call, the order of arguments is inverted:

 for.end9:                                         ; preds = %for.body4
-  %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
+  %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
   ret i32 0

Any thoughts what's going on here?


Mit freundlichen Gruessen / Best Regards

Ulrich Weigand

--
  Dr. Ulrich Weigand | Phone: +49-7031/16-3727
  STSM, GNU/Linux compilers and toolchain
  IBM Deutschland Research & Development GmbH
  Vorsitzende des Aufsichtsrats: Martina Koederitz | Geschäftsführung: Dirk
Wittkopp
  Sitz der Gesellschaft: Böblingen | Registergericht: Amtsgericht
Stuttgart, HRB 243294





More information about the cfe-commits mailing list