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