llvm-project/llvm/test/CodeGen/PowerPC/fast-isel-pcrel.ll
Kai Nacke 427fb35192 [PPC] Opaque pointer migration, part 1.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.

Reviewed By: nemanja, amyk, nikic, PowerPC

Differential Revision: https://reviews.llvm.org/D135470
2022-10-11 17:24:06 +00:00

72 lines
2.5 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -O0 -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -fast-isel -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
; RUN: FileCheck %s
%struct._IO_FILE = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i64, i32, [20 x i8] }
%struct._IO_marker = type { ptr, ptr, i32 }
@.str = private unnamed_addr constant [25 x i8] c"Breaking the TOC for FP\0A\00", align 1
@.str.1 = private unnamed_addr constant [25 x i8] c"Breaking the TOC for GV\0A\00", align 1
@stdout = external global ptr, align 8
; Function Attrs: noinline nounwind optnone
define internal void @loadFP(ptr %d) #0 {
; CHECK-LABEL: loadFP:
; CHECK: .localentry loadFP, 1
; CHECK-NEXT: # %bb.0: # %entry
; CHECK-NEXT: mflr r0
; CHECK-NEXT: std r0, 16(r1)
; CHECK-NEXT: stdu r1, -112(r1)
; CHECK-NEXT: std r3, 104(r1)
; CHECK-NEXT: paddi r3, 0, .L.str@PCREL, 1
; CHECK-NEXT: bl printf@notoc
; CHECK-NEXT: ld r4, 104(r1)
; CHECK-NEXT: pli r5, 1075049922
; CHECK-NEXT: pli r3, 2405181686
; CHECK-NEXT: rldimi r3, r5, 32, 0
; CHECK-NEXT: std r3, 0(r4)
; CHECK-NEXT: addi r1, r1, 112
; CHECK-NEXT: ld r0, 16(r1)
; CHECK-NEXT: mtlr r0
; CHECK-NEXT: blr
entry:
%d.addr = alloca ptr, align 8
store ptr %d, ptr %d.addr, align 8
%call = call signext i32 (ptr, ...) @printf(ptr @.str)
%0 = load ptr, ptr %d.addr, align 8
store double 4.990000e+00, ptr %0, align 8
ret void
}
declare signext i32 @printf(ptr, ...)
; Function Attrs: noinline nounwind optnone
define internal void @loadGV() #0 {
; CHECK-LABEL: loadGV:
; CHECK: .localentry loadGV, 1
; CHECK-NEXT: # %bb.0: # %entry
; CHECK-NEXT: mflr r0
; CHECK-NEXT: std r0, 16(r1)
; CHECK-NEXT: stdu r1, -96(r1)
; CHECK-NEXT: paddi r3, 0, .L.str.1@PCREL, 1
; CHECK-NEXT: bl printf@notoc
; CHECK-NEXT: pld r3, stdout@got@pcrel(0), 1
; CHECK-NEXT: ld r4, 0(r3)
; CHECK-NEXT: li r3, 97
; CHECK-NEXT: bl _IO_putc@notoc
; CHECK-NEXT: addi r1, r1, 96
; CHECK-NEXT: ld r0, 16(r1)
; CHECK-NEXT: mtlr r0
; CHECK-NEXT: blr
entry:
%call = call signext i32 (ptr, ...) @printf(ptr @.str.1)
%0 = load ptr, ptr @stdout, align 8
%call1 = call signext i32 @_IO_putc(i32 signext 97, ptr %0)
ret void
}
declare signext i32 @_IO_putc(i32 signext, ptr)
attributes #0 = { noinline nounwind optnone }