Jinsong Ji | b6bfcfc | 2019-03-12 17:55:32 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
Nemanja Ivanovic | e54a9ee | 2018-02-22 03:02:41 +0000 | [diff] [blame] | 2 | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown < %s | \ |
| 3 | ; RUN: FileCheck %s --implicit-check-not=mtctr --implicit-check-not=bdnz |
| 4 | $test = comdat any |
| 5 | |
| 6 | ; No CTR loop due to frem (since it is always a call). |
Jinsong Ji | fb4b86a | 2019-08-30 19:24:25 +0000 | [diff] [blame] | 7 | define void @test() nounwind comdat { |
Nemanja Ivanovic | e54a9ee | 2018-02-22 03:02:41 +0000 | [diff] [blame] | 8 | ; CHECK-LABEL: test: |
Jinsong Ji | b6bfcfc | 2019-03-12 17:55:32 +0000 | [diff] [blame] | 9 | ; CHECK: # %bb.0: |
| 10 | ; CHECK-NEXT: mflr 0 |
Jinsong Ji | 9dc2c1d | 2019-03-12 18:27:09 +0000 | [diff] [blame] | 11 | ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill |
| 12 | ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill |
Jinsong Ji | b6bfcfc | 2019-03-12 17:55:32 +0000 | [diff] [blame] | 13 | ; CHECK-NEXT: std 0, 16(1) |
Jinsong Ji | 9dc2c1d | 2019-03-12 18:27:09 +0000 | [diff] [blame] | 14 | ; CHECK-NEXT: stdu 1, -64(1) |
Jinsong Ji | b6bfcfc | 2019-03-12 17:55:32 +0000 | [diff] [blame] | 15 | ; CHECK-NEXT: ld 29, 0(3) |
Jinsong Ji | 9dc2c1d | 2019-03-12 18:27:09 +0000 | [diff] [blame] | 16 | ; CHECK-NEXT: ld 30, 32(1) |
Jinsong Ji | b6bfcfc | 2019-03-12 17:55:32 +0000 | [diff] [blame] | 17 | ; CHECK-NEXT: cmpld 30, 29 |
Nemanja Ivanovic | e54a9ee | 2018-02-22 03:02:41 +0000 | [diff] [blame] | 18 | ; CHECK-NEXT: bge- 0, .LBB0_2 |
| 19 | ; CHECK-NEXT: .p2align 5 |
| 20 | ; CHECK-NEXT: .LBB0_1: # %bounds.ok |
Jinsong Ji | fb4b86a | 2019-08-30 19:24:25 +0000 | [diff] [blame] | 21 | ; CHECK-NEXT: # |
| 22 | ; CHECK-NEXT: lfsx 2, 0, 3 |
Jinsong Ji | 9dc2c1d | 2019-03-12 18:27:09 +0000 | [diff] [blame] | 23 | ; CHECK-NEXT: xxlxor 1, 1, 1 |
Nemanja Ivanovic | e54a9ee | 2018-02-22 03:02:41 +0000 | [diff] [blame] | 24 | ; CHECK-NEXT: bl fmodf |
| 25 | ; CHECK-NEXT: nop |
| 26 | ; CHECK-NEXT: addi 30, 30, 1 |
| 27 | ; CHECK-NEXT: stfsx 1, 0, 3 |
| 28 | ; CHECK-NEXT: cmpld 30, 29 |
| 29 | ; CHECK-NEXT: blt+ 0, .LBB0_1 |
| 30 | ; CHECK-NEXT: .LBB0_2: # %bounds.fail |
Jinsong Ji | 9dc2c1d | 2019-03-12 18:27:09 +0000 | [diff] [blame] | 31 | ; CHECK-NEXT: std 30, 32(1) |
Nemanja Ivanovic | e54a9ee | 2018-02-22 03:02:41 +0000 | [diff] [blame] | 32 | %pos = alloca i64, align 8 |
| 33 | br label %forcond |
| 34 | |
| 35 | forcond: ; preds = %bounds.ok, %0 |
| 36 | %1 = load i64, i64* %pos |
| 37 | %.len1 = load i64, i64* undef |
| 38 | %bounds.cmp = icmp ult i64 %1, %.len1 |
| 39 | br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail |
| 40 | |
| 41 | bounds.ok: ; preds = %forcond |
| 42 | %2 = load float, float* undef |
| 43 | %3 = frem float 0.000000e+00, %2 |
| 44 | store float %3, float* undef |
| 45 | %4 = load i64, i64* %pos |
| 46 | %5 = add i64 %4, 1 |
| 47 | store i64 %5, i64* %pos |
| 48 | br label %forcond |
| 49 | |
| 50 | bounds.fail: ; preds = %forcond |
| 51 | unreachable |
| 52 | } |
| 53 | |