Files
clang-p2996/llvm/test/CodeGen/PowerPC/pr36292.ll
Chen Zheng b5e1fc19da [PowerPC] don't check CTR clobber in hardware loop insertion pass
We added a new post-isel CTRLoop pass in D122125. That pass will expand
the hardware loop related intrinsic to CTR loop or normal loop based
on the loop context. So we don't need to conservatively check the CTR
clobber now on the IR level.

Reviewed By: lkail

Differential Revision: https://reviews.llvm.org/D135847
2022-12-04 20:53:49 -05:00

60 lines
1.8 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown < %s | \
; RUN: FileCheck %s --implicit-check-not=mtctr --implicit-check-not=bdnz
$test = comdat any
; No CTR loop due to frem (since it is always a call).
define void @test() nounwind comdat {
; CHECK-LABEL: test:
; CHECK: # %bb.0:
; CHECK-NEXT: mflr 0
; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
; CHECK-NEXT: stdu 1, -64(1)
; CHECK-NEXT: std 0, 80(1)
; CHECK-NEXT: ld 3, 0(3)
; CHECK-NEXT: ld 30, 32(1)
; CHECK-NEXT: sub 4, 3, 30
; CHECK-NEXT: cmpld 4, 3
; CHECK-NEXT: iselgt 3, 0, 4
; CHECK-NEXT: addi 29, 3, 1
; CHECK-NEXT: .p2align 4
; CHECK-NEXT: .LBB0_1: # %forcond
; CHECK-NEXT: #
; CHECK-NEXT: addi 29, 29, -1
; CHECK-NEXT: cmpldi 29, 0
; CHECK-NEXT: bc 4, 1, .LBB0_3
; CHECK-NEXT: # %bb.2: # %bounds.ok
; CHECK-NEXT: #
; CHECK-NEXT: lfs 2, 0(3)
; CHECK-NEXT: xxlxor 1, 1, 1
; CHECK-NEXT: bl fmodf
; CHECK-NEXT: nop
; CHECK-NEXT: addi 30, 30, 1
; CHECK-NEXT: stfs 1, 0(3)
; CHECK-NEXT: b .LBB0_1
; CHECK-NEXT: .LBB0_3: # %bounds.fail
; CHECK-NEXT: std 30, 32(1)
%pos = alloca i64, align 8
br label %forcond
forcond: ; preds = %bounds.ok, %0
%1 = load i64, ptr %pos
%.len1 = load i64, ptr undef
%bounds.cmp = icmp ult i64 %1, %.len1
br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail
bounds.ok: ; preds = %forcond
%2 = load float, ptr undef
%3 = frem float 0.000000e+00, %2
store float %3, ptr undef
%4 = load i64, ptr %pos
%5 = add i64 %4, 1
store i64 %5, ptr %pos
br label %forcond
bounds.fail: ; preds = %forcond
unreachable
}