llvm/test/CodeGen/X86/tailcall-multiret.ll
Keno Fischer 4b1cddbaf0 Do not insert a tail call when returning multiple values on X86
Summary: This fixes http://llvm.org/bugs/show_bug.cgi?id=19530.
The problem is that X86ISelLowering erroneously thought the third call
was eligible for tail call elimination.
It would have been if it's return value was actually the one returned
by the calling function, but here that is not the case and
additional values are being returned.

Test Plan: Test case from the original bug report is included.

Reviewers: rafael

Reviewed By: rafael

Subscribers: rafael, llvm-commits

Differential Revision: http://reviews.llvm.org/D4968

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216117 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-20 19:00:37 +00:00

17 lines
715 B
LLVM

; RUN: llc < %s -mtriple=x86_64-linux-gnu -mcpu=core2 | FileCheck %s
; See PR19530
declare double @llvm.powi.f64(double %Val, i32 %power)
define <3 x double> @julia_foo17589(i32 %arg) {
%tmp1 = call double @llvm.powi.f64(double 1.000000e+00, i32 %arg)
; CHECK: callq __powidf2
%tmp2 = insertelement <3 x double> undef, double %tmp1, i32 0
%tmp3 = call double @llvm.powi.f64(double 2.000000e+00, i32 %arg)
; CHECK: callq __powidf2
%tmp4 = insertelement <3 x double> %tmp2, double %tmp3, i32 1
%tmp5 = call double @llvm.powi.f64(double 3.000000e+00, i32 %arg)
; CHECK: callq __powidf2
%tmp6 = insertelement <3 x double> %tmp4, double %tmp5, i32 2
; CHECK-NOT: TAILCALL
ret <3 x double> %tmp6
}