[PATCH] Do not insert a tail call when returning multiple values on X86

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue Aug 19 08:46:45 PDT 2014


> +; RUN: llc < %s -mcpu=core2 | FileCheck %s

You might want to use -mtriple just to be sure.

> +; See PR19530
> +declare double    @llvm.powi.f64(double %Val, i32 %power)
> +define <3 x double> @julia_foo17589(i64) {
> +top:
> +  %1 = trunc i64 %0 to i32
> +  %2 = call double @llvm.powi.f64(double 1.000000e+00, i32 %1)
> +; CHECK: callq   __powidf2
> +  %3 = insertelement <3 x double> undef, double %2, i32 0
> +  %4 = call double @llvm.powi.f64(double 2.000000e+00, i32 %1)
> +; CHECK: callq   __powidf2
> +  %5 = insertelement <3 x double> %3, double %4, i32 1
> +  %6 = call double @llvm.powi.f64(double 3.000000e+00, i32 %1)
> +; CHECK: callq   __powidf2
> +  %7 = insertelement <3 x double> %5, double %6, i32 2
> +; CHECK-NOT: TAILCALL
> +  ret <3 x double> %7
> +}

The test can be a bit simple without the trunc and and easier to read
by using named instructions:

declare double @llvm.powi.f64(double, i32)

define <3 x double> @julia_foo17589(i32 %arg) {
  %tmp1 = call double @llvm.powi.f64(double 1.000000e+00, i32 %arg)
  %tmp2 = insertelement <3 x double> undef, double %tmp1, i32 0
  %tmp3 = call double @llvm.powi.f64(double 2.000000e+00, i32 %arg)
  %tmp4 = insertelement <3 x double> %tmp2, double %tmp3, i32 1
  %tmp5 = call double @llvm.powi.f64(double 3.000000e+00, i32 %arg)
  %tmp6 = insertelement <3 x double> %tmp4, double %tmp5, i32 2
  ret <3 x double> %tmp6
}

> \ No newline at end of file

please add one :-)



More information about the llvm-commits mailing list