1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 | grep fldz 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 | grep fld1 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker%0 = type { x86_fp80, x86_fp80 } 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; This is basically this code on x86-64: 7*9880d681SAndroid Build Coastguard Worker; _Complex long double test() { return 1.0; } 8*9880d681SAndroid Build Coastguard Workerdefine %0 @test() { 9*9880d681SAndroid Build Coastguard Worker %A = fpext double 1.0 to x86_fp80 10*9880d681SAndroid Build Coastguard Worker %B = fpext double 0.0 to x86_fp80 11*9880d681SAndroid Build Coastguard Worker %mrv = insertvalue %0 undef, x86_fp80 %A, 0 12*9880d681SAndroid Build Coastguard Worker %mrv1 = insertvalue %0 %mrv, x86_fp80 %B, 1 13*9880d681SAndroid Build Coastguard Worker ret %0 %mrv1 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker;_test2: 18*9880d681SAndroid Build Coastguard Worker; fld1 19*9880d681SAndroid Build Coastguard Worker; fld %st(0) 20*9880d681SAndroid Build Coastguard Worker; ret 21*9880d681SAndroid Build Coastguard Workerdefine %0 @test2() { 22*9880d681SAndroid Build Coastguard Worker %A = fpext double 1.0 to x86_fp80 23*9880d681SAndroid Build Coastguard Worker %mrv = insertvalue %0 undef, x86_fp80 %A, 0 24*9880d681SAndroid Build Coastguard Worker %mrv1 = insertvalue %0 %mrv, x86_fp80 %A, 1 25*9880d681SAndroid Build Coastguard Worker ret %0 %mrv1 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; Uses both values. 29*9880d681SAndroid Build Coastguard Workerdefine void @call1(x86_fp80 *%P1, x86_fp80 *%P2) { 30*9880d681SAndroid Build Coastguard Worker %a = call %0 @test() 31*9880d681SAndroid Build Coastguard Worker %b = extractvalue %0 %a, 0 32*9880d681SAndroid Build Coastguard Worker store x86_fp80 %b, x86_fp80* %P1 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker %c = extractvalue %0 %a, 1 35*9880d681SAndroid Build Coastguard Worker store x86_fp80 %c, x86_fp80* %P2 36*9880d681SAndroid Build Coastguard Worker ret void 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; Uses both values, requires fxch 40*9880d681SAndroid Build Coastguard Workerdefine void @call2(x86_fp80 *%P1, x86_fp80 *%P2) { 41*9880d681SAndroid Build Coastguard Worker %a = call %0 @test() 42*9880d681SAndroid Build Coastguard Worker %b = extractvalue %0 %a, 1 43*9880d681SAndroid Build Coastguard Worker store x86_fp80 %b, x86_fp80* %P1 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker %c = extractvalue %0 %a, 0 46*9880d681SAndroid Build Coastguard Worker store x86_fp80 %c, x86_fp80* %P2 47*9880d681SAndroid Build Coastguard Worker ret void 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; Uses ST(0), ST(1) is dead but must be popped. 51*9880d681SAndroid Build Coastguard Workerdefine void @call3(x86_fp80 *%P1, x86_fp80 *%P2) { 52*9880d681SAndroid Build Coastguard Worker %a = call %0 @test() 53*9880d681SAndroid Build Coastguard Worker %b = extractvalue %0 %a, 0 54*9880d681SAndroid Build Coastguard Worker store x86_fp80 %b, x86_fp80* %P1 55*9880d681SAndroid Build Coastguard Worker ret void 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; Uses ST(1), ST(0) is dead and must be popped. 59*9880d681SAndroid Build Coastguard Workerdefine void @call4(x86_fp80 *%P1, x86_fp80 *%P2) { 60*9880d681SAndroid Build Coastguard Worker %a = call %0 @test() 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker %c = extractvalue %0 %a, 1 63*9880d681SAndroid Build Coastguard Worker store x86_fp80 %c, x86_fp80* %P2 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67