[PATCH] Do not insert a tail call when returning multiple values on X86
Rafael Ávila de Espíndola
rafael.espindola at gmail.com
Tue Aug 19 08:46:57 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 :-)
http://reviews.llvm.org/D4968
More information about the llvm-commits
mailing list