llvm-project/llvm/test/CodeGen/PowerPC/out-of-range-dform.ll
Chen Zheng eb7d16ea25 [PowerPC] make expensive mflr be away from its user in the function prologue
mflr is kind of expensive on Power version smaller than 10, so we should
schedule the store for the mflr's def away from mflr.

In epilogue, the expensive mtlr has no user for its def, so it doesn't
matter that the load and the mtlr are back-to-back.

Reviewed By: RolandF

Differential Revision: https://reviews.llvm.org/D137423
2022-11-14 21:14:20 -05:00

67 lines
2.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
; RUN: -check-prefix=CHECK-P9
@_ZL3num = external dso_local unnamed_addr global float, align 4
define dso_local void @main() local_unnamed_addr personality ptr @__gxx_personality_v0 {
; CHECK-P9-LABEL: main:
; CHECK-P9: # %bb.0: # %bb
; CHECK-P9-NEXT: mflr r0
; CHECK-P9-NEXT: stdu r1, -32(r1)
; CHECK-P9-NEXT: std r0, 48(r1)
; CHECK-P9-NEXT: .cfi_def_cfa_offset 32
; CHECK-P9-NEXT: .cfi_offset lr, 16
; CHECK-P9-NEXT: bl malloc
; CHECK-P9-NEXT: nop
; CHECK-P9-NEXT: addis r4, r2, _ZL3num@toc@ha
; CHECK-P9-NEXT: addi r3, r3, -25400
; CHECK-P9-NEXT: lfs f0, _ZL3num@toc@l(r4)
; CHECK-P9-NEXT: addis r4, r2, .LCPI0_0@toc@ha
; CHECK-P9-NEXT: lfs f1, .LCPI0_0@toc@l(r4)
; CHECK-P9-NEXT: li r4, 0
; CHECK-P9-NEXT: xsmulsp f0, f0, f1
; CHECK-P9-NEXT: cmpldi r4, 0
; CHECK-P9-NEXT: beq- cr0, .LBB0_2
; CHECK-P9-NEXT: .p2align 5
; CHECK-P9-NEXT: .LBB0_1: # %bb5
; CHECK-P9-NEXT: #
; CHECK-P9-NEXT: addi r3, r3, 25400
; CHECK-P9-NEXT: addi r4, r4, 25400
; CHECK-P9-NEXT: stfs f0, 15240(r3)
; CHECK-P9-NEXT: cmpldi r4, 0
; CHECK-P9-NEXT: bne+ cr0, .LBB0_1
; CHECK-P9-NEXT: .LBB0_2: # %bb16
bb:
%i = tail call noalias dereferenceable_or_null(6451600) ptr @malloc()
br label %bb2
bb2: ; preds = %bb5, %bb
%i3 = phi i64 [ 0, %bb ], [ %i15, %bb5 ]
%i4 = icmp eq i64 %i3, 0
br i1 %i4, label %bb16, label %bb5
bb5: ; preds = %bb2
%i6 = mul nuw nsw i64 %i3, 1270
%i7 = add nuw nsw i64 %i6, 0
%i8 = getelementptr inbounds float, ptr %i, i64 %i7
store float undef, ptr %i8, align 4
%i9 = add nuw nsw i64 %i3, 3
%i10 = load float, ptr @_ZL3num, align 4
%i11 = fmul float %i10, 0x3E00000000000000
%i12 = mul nuw nsw i64 %i9, 1270
%i13 = add nuw nsw i64 %i12, 0
%i14 = getelementptr inbounds float, ptr %i, i64 %i13
store float %i11, ptr %i14, align 4
%i15 = add nuw nsw i64 %i3, 5
br label %bb2
bb16: ; preds = %bb2
unreachable
}
declare i32 @__gxx_personality_v0(...)
declare ptr @malloc() local_unnamed_addr