Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown < %s  | \
      2 ; RUN:   FileCheck %s --implicit-check-not=mtctr --implicit-check-not=bdnz
      3 $test = comdat any
      4 
      5 ; No CTR loop due to frem (since it is always a call).
      6 define void @test() #0 comdat {
      7 ; CHECK-LABEL: test:
      8 ; CHECK:    ld 29, 0(3)
      9 ; CHECK:    ld 30, 40(1)
     10 ; CHECK:    xxlxor 31, 31, 31
     11 ; CHECK:    cmpld 30, 29
     12 ; CHECK-NEXT:    bge- 0, .LBB0_2
     13 ; CHECK-NEXT:    .p2align 5
     14 ; CHECK-NEXT:  .LBB0_1: # %bounds.ok
     15 ; CHECK:    fmr 1, 31
     16 ; CHECK-NEXT:    lfsx 2, 0, 3
     17 ; CHECK-NEXT:    bl fmodf
     18 ; CHECK-NEXT:    nop
     19 ; CHECK-NEXT:    addi 30, 30, 1
     20 ; CHECK-NEXT:    stfsx 1, 0, 3
     21 ; CHECK-NEXT:    cmpld 30, 29
     22 ; CHECK-NEXT:    blt+ 0, .LBB0_1
     23 ; CHECK-NEXT:  .LBB0_2: # %bounds.fail
     24 ; CHECK-NEXT:    std 30, 40(1)
     25   %pos = alloca i64, align 8
     26   br label %forcond
     27 
     28 forcond:                                          ; preds = %bounds.ok, %0
     29   %1 = load i64, i64* %pos
     30   %.len1 = load i64, i64* undef
     31   %bounds.cmp = icmp ult i64 %1, %.len1
     32   br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail
     33 
     34 bounds.ok:                                        ; preds = %forcond
     35   %2 = load float, float* undef
     36   %3 = frem float 0.000000e+00, %2
     37   store float %3, float* undef
     38   %4 = load i64, i64* %pos
     39   %5 = add i64 %4, 1
     40   store i64 %5, i64* %pos
     41   br label %forcond
     42 
     43 bounds.fail:                                      ; preds = %forcond
     44   unreachable
     45 }
     46 
     47