1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc-unknown-linux-gnu -O1 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; double x, y; 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; void foo1() 6*9880d681SAndroid Build Coastguard Worker; { 7*9880d681SAndroid Build Coastguard Worker; x = y = 1.1; 8*9880d681SAndroid Build Coastguard Worker; for (int i = 0; i < 175; i++) 9*9880d681SAndroid Build Coastguard Worker; y = x + y; 10*9880d681SAndroid Build Coastguard Worker; } 11*9880d681SAndroid Build Coastguard Worker; void foo2() 12*9880d681SAndroid Build Coastguard Worker; { 13*9880d681SAndroid Build Coastguard Worker; x = y = 1.1; 14*9880d681SAndroid Build Coastguard Worker; for (int i = 0; i < 175; i++) 15*9880d681SAndroid Build Coastguard Worker; y = x - y; 16*9880d681SAndroid Build Coastguard Worker; } 17*9880d681SAndroid Build Coastguard Worker; void foo3() 18*9880d681SAndroid Build Coastguard Worker; { 19*9880d681SAndroid Build Coastguard Worker; x = y = 1.1; 20*9880d681SAndroid Build Coastguard Worker; for (int i = 0; i < 175; i++) 21*9880d681SAndroid Build Coastguard Worker; y = x * y; 22*9880d681SAndroid Build Coastguard Worker; } 23*9880d681SAndroid Build Coastguard Worker; void foo4() 24*9880d681SAndroid Build Coastguard Worker; { 25*9880d681SAndroid Build Coastguard Worker; x = y = 1.1; 26*9880d681SAndroid Build Coastguard Worker; for (int i = 0; i < 175; i++) 27*9880d681SAndroid Build Coastguard Worker; y = x / y; 28*9880d681SAndroid Build Coastguard Worker; } 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-p:32:32-i64:64-n32" 31*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc-buildroot-linux-gnu" 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker@y = common global double 0.000000e+00, align 8 34*9880d681SAndroid Build Coastguard Worker@x = common global double 0.000000e+00, align 8 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @foo1() #0 { 37*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @y, align 8 38*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @x, align 8 39*9880d681SAndroid Build Coastguard Worker br label %2 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; <label>:1 ; preds = %2 42*9880d681SAndroid Build Coastguard Worker %.lcssa = phi double [ %4, %2 ] 43*9880d681SAndroid Build Coastguard Worker store double %.lcssa, double* @y, align 8 44*9880d681SAndroid Build Coastguard Worker ret void 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; <label>:2 ; preds = %2, %0 47*9880d681SAndroid Build Coastguard Worker %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ] 48*9880d681SAndroid Build Coastguard Worker %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ] 49*9880d681SAndroid Build Coastguard Worker %4 = fadd double %3, 1.100000e+00 50*9880d681SAndroid Build Coastguard Worker %5 = add nuw nsw i32 %i.01, 1 51*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %5, 75 52*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %1, label %2 53*9880d681SAndroid Build Coastguard Worker ; CHECK: bl __adddf3 54*9880d681SAndroid Build Coastguard Worker ; CHECK: cmplwi 55*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: li [[REG1:[0-9]+]], 175 56*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mtctr [[REG1]] 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine void @foo2() #0 { 60*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @y, align 8 61*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @x, align 8 62*9880d681SAndroid Build Coastguard Worker br label %2 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; <label>:1 ; preds = %2 65*9880d681SAndroid Build Coastguard Worker %.lcssa = phi double [ %4, %2 ] 66*9880d681SAndroid Build Coastguard Worker store double %.lcssa, double* @y, align 8 67*9880d681SAndroid Build Coastguard Worker ret void 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; <label>:2 ; preds = %2, %0 70*9880d681SAndroid Build Coastguard Worker %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ] 71*9880d681SAndroid Build Coastguard Worker %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ] 72*9880d681SAndroid Build Coastguard Worker %4 = fsub double 1.100000e+00, %3 73*9880d681SAndroid Build Coastguard Worker %5 = add nuw nsw i32 %i.01, 1 74*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %5, 75 75*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %1, label %2 76*9880d681SAndroid Build Coastguard Worker ; CHECK: bl __subdf3 77*9880d681SAndroid Build Coastguard Worker ; CHECK: cmplwi 78*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: li [[REG1:[0-9]+]], 175 79*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mtctr [[REG1]] 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine void @foo3() #0 { 83*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @y, align 8 84*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @x, align 8 85*9880d681SAndroid Build Coastguard Worker br label %2 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker; <label>:1 ; preds = %2 88*9880d681SAndroid Build Coastguard Worker %.lcssa = phi double [ %4, %2 ] 89*9880d681SAndroid Build Coastguard Worker store double %.lcssa, double* @y, align 8 90*9880d681SAndroid Build Coastguard Worker ret void 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; <label>:2 ; preds = %2, %0 93*9880d681SAndroid Build Coastguard Worker %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ] 94*9880d681SAndroid Build Coastguard Worker %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ] 95*9880d681SAndroid Build Coastguard Worker %4 = fmul double %3, 1.100000e+00 96*9880d681SAndroid Build Coastguard Worker %5 = add nuw nsw i32 %i.01, 1 97*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %5, 75 98*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %1, label %2 99*9880d681SAndroid Build Coastguard Worker ; CHECK: bl __muldf3 100*9880d681SAndroid Build Coastguard Worker ; CHECK: cmplwi 101*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: li [[REG1:[0-9]+]], 175 102*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mtctr [[REG1]] 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine void @foo4() #0 { 106*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @y, align 8 107*9880d681SAndroid Build Coastguard Worker store double 1.100000e+00, double* @x, align 8 108*9880d681SAndroid Build Coastguard Worker br label %2 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; <label>:1 ; preds = %2 111*9880d681SAndroid Build Coastguard Worker %.lcssa = phi double [ %4, %2 ] 112*9880d681SAndroid Build Coastguard Worker store double %.lcssa, double* @y, align 8 113*9880d681SAndroid Build Coastguard Worker ret void 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker; <label>:2 ; preds = %2, %0 116*9880d681SAndroid Build Coastguard Worker %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ] 117*9880d681SAndroid Build Coastguard Worker %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ] 118*9880d681SAndroid Build Coastguard Worker %4 = fdiv double 1.100000e+00, %3 119*9880d681SAndroid Build Coastguard Worker %5 = add nuw nsw i32 %i.01, 1 120*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %5, 75 121*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %1, label %2 122*9880d681SAndroid Build Coastguard Worker ; CHECK: bl __divdf3 123*9880d681SAndroid Build Coastguard Worker ; CHECK: cmplwi 124*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: li [[REG1:[0-9]+]], 175 125*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mtctr [[REG1]] 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerattributes #0 = { "use-soft-float"="true" } 129*9880d681SAndroid Build Coastguard Worker 130