Skip to content

Commit

Permalink
[PowerPC][NFC] Add test for 5b18b6e
Browse files Browse the repository at this point in the history
When the above commit was added to fix a kernel build break, no tests were
added. Just adding some testing to ensure similar regressions do not recur.
  • Loading branch information
nemanjai committed Apr 10, 2020
1 parent c3db138 commit 95b718e
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 35 deletions.
32 changes: 19 additions & 13 deletions llvm/test/CodeGen/PowerPC/pcrel-call-linkage-leaf.ll
@@ -1,11 +1,14 @@
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=future -ppc-asm-full-reg-names < %s \
; RUN: | FileCheck %s --check-prefix=CHECK-S
; RUN: | FileCheck %s --check-prefixes=CHECK-S,CHECK-ALL
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s \
; RUN: | FileCheck %s --check-prefixes=CHECK-P9,CHECK-ALL

@global_int = common dso_local local_unnamed_addr global i32 0, align 4

define dso_local signext i32 @NoTOC() local_unnamed_addr {
; CHECK-S-LABEL: NoTOC:
; CHECK-ALL-LABEL: NoTOC:
; CHECK-S-NOT: .localentry
; CHECK-S: li r3, 42
; CHECK-S-NEXT: blr
Expand All @@ -14,7 +17,7 @@ entry:
}

define dso_local signext i32 @AsmClobberX2(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: AsmClobberX2:
; CHECK-ALL-LABEL: AsmClobberX2:
; CHECK-S: .localentry AsmClobberX2, 1
; CHECK-S: add r3, r4, r3
; CHECK-S: #APP
Expand All @@ -32,7 +35,7 @@ entry:
; should be replaced with @pcrel and we won't need R2 and so the problem
; goes away.
define dso_local signext i32 @AsmClobberX2WithTOC(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: AsmClobberX2WithTOC:
; CHECK-ALL-LABEL: AsmClobberX2WithTOC:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep2@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep2@l
; CHECK-S: .localentry AsmClobberX2WithTOC, .Lfunc_lep2-.Lfunc_gep2
Expand All @@ -54,9 +57,10 @@ entry:
}

define dso_local signext i32 @AsmClobberX5(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: AsmClobberX5:
; CHECK-ALL-LABEL: AsmClobberX5:
; CHECK-S: .localentry AsmClobberX5, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-P9-NOT: .localentry
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: add r3, r4, r3
; CHECK-S-NEXT: extsw r3, r3
; CHECK-S-NEXT: #APP
Expand All @@ -71,8 +75,9 @@ entry:

; Clobber all GPRs except R2.
define dso_local signext i32 @AsmClobberNotR2(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: AsmClobberNotR2:
; CHECK-ALL-LABEL: AsmClobberNotR2:
; CHECK-S: .localentry AsmClobberNotR2, 1
; CHECK-P9-NOT: .localentry
; CHECK-S: add r3, r4, r3
; CHECK-S: stw r3, -148(r1) # 4-byte Folded Spill
; CHECK-S-NEXT: #APP
Expand All @@ -89,9 +94,10 @@ entry:
; Increase register pressure enough to force the register allocator to
; make use of R2.
define dso_local signext i32 @X2IsCallerSaved(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h) local_unnamed_addr {
; CHECK-S-LABEL: X2IsCallerSaved:
; CHECK-ALL-LABEL: X2IsCallerSaved:
; CHECK-S: .localentry X2IsCallerSaved, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-P9-NOT: .localentry
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: std r29, -24(r1) # 8-byte Folded Spill
; CHECK-S-NEXT: add r11, r4, r3
; CHECK-S-NEXT: subf r29, r9, r8
Expand Down Expand Up @@ -146,11 +152,11 @@ entry:


define dso_local signext i32 @UsesX2AsTOC() local_unnamed_addr {
; CHECK-S-LABEL: UsesX2AsTOC:
; CHECK-ALL-LABEL: UsesX2AsTOC:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep6@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep6@l
; CHECK-S: .localentry UsesX2AsTOC, .Lfunc_lep6-.Lfunc_gep6
; CHECK-S: # %bb.0: # %entry
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: addis r3, r2, global_int@toc@ha
; CHECK-S-NEXT: lwa r3, global_int@toc@l(r3)
; CHECK-S-NEXT: blr
Expand All @@ -161,9 +167,9 @@ entry:


define dso_local double @UsesX2AsConstPoolTOC() local_unnamed_addr {
; CHECK-S-LABEL: UsesX2AsConstPoolTOC:
; CHECK-ALL-LABEL: UsesX2AsConstPoolTOC:
; CHECK-S-NOT: .localentry
; CHECK-S: # %bb.0: # %entry
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: plfd f1, .LCPI7_0@PCREL(0), 1
; CHECK-S-NEXT: blr
entry:
Expand Down
49 changes: 27 additions & 22 deletions llvm/test/CodeGen/PowerPC/pcrel-call-linkage-with-calls.ll
@@ -1,6 +1,9 @@
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=future -ppc-asm-full-reg-names < %s \
; RUN: | FileCheck %s --check-prefix=CHECK-S
; RUN: | FileCheck %s --check-prefixes=CHECK-S,CHECK-ALL
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s \
; RUN: | FileCheck %s --check-prefixes=CHECK-P9,CHECK-ALL

@globalVar = common dso_local local_unnamed_addr global i32 0, align 4
@externGlobalVar = external local_unnamed_addr global i32, align 4
Expand All @@ -11,7 +14,7 @@
; it. The only thing we really need to check here is that st_other=0 and
; so we make sure that there is no .localentry.
define dso_local signext i32 @localCall(i32 signext %a) local_unnamed_addr #0 {
; CHECK-S-LABEL: localCall:
; CHECK-ALL-LABEL: localCall:
; CHECK-S-NOT: .localentry
; CHECK-S: addi r3, r3, 5
; CHECK-S-NEXT: extsw r3, r3
Expand All @@ -22,7 +25,7 @@ entry:
}

define dso_local signext i32 @DirectCallLocal1(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallLocal1:
; CHECK-ALL-LABEL: DirectCallLocal1:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep1@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep1@l
; CHECK-S: .localentry DirectCallLocal1, .Lfunc_lep1-.Lfunc_gep1
Expand Down Expand Up @@ -53,7 +56,7 @@ entry:
}

define dso_local signext i32 @DirectCallLocal2(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallLocal2:
; CHECK-ALL-LABEL: DirectCallLocal2:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep2@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep2@l
; CHECK-S: .localentry DirectCallLocal2, .Lfunc_lep2-.Lfunc_gep2
Expand Down Expand Up @@ -85,9 +88,9 @@ entry:
}

define dso_local signext i32 @DirectCallLocalNoGlobal(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallLocalNoGlobal:
; CHECK-ALL-LABEL: DirectCallLocalNoGlobal:
; CHECK-S: .localentry DirectCallLocalNoGlobal, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-S-NEXT: mflr r0
; CHECK-S-NEXT: .cfi_def_cfa_offset 48
; CHECK-S-NEXT: .cfi_offset lr, 16
Expand All @@ -111,7 +114,7 @@ entry:
}

define dso_local signext i32 @DirectCallExtern1(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallExtern1:
; CHECK-ALL-LABEL: DirectCallExtern1:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep4@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep4@l
; CHECK-S: .localentry DirectCallExtern1, .Lfunc_lep4-.Lfunc_gep4
Expand Down Expand Up @@ -144,7 +147,7 @@ entry:
declare signext i32 @externCall(i32 signext) local_unnamed_addr

define dso_local signext i32 @DirectCallExtern2(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallExtern2:
; CHECK-ALL-LABEL: DirectCallExtern2:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep5@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep5@l
; CHECK-S: .localentry DirectCallExtern2, .Lfunc_lep5-.Lfunc_gep5
Expand Down Expand Up @@ -176,9 +179,10 @@ entry:
}

define dso_local signext i32 @DirectCallExternNoGlobal(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: DirectCallExternNoGlobal:
; CHECK-ALL-LABEL: DirectCallExternNoGlobal:
; CHECK-S: .localentry DirectCallExternNoGlobal, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-P9: .localentry DirectCallExternNoGlobal, .Lfunc_lep6-.Lfunc_gep6
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: mflr r0
; CHECK-S-NEXT: .cfi_def_cfa_offset 48
; CHECK-S-NEXT: .cfi_offset lr, 16
Expand All @@ -202,7 +206,7 @@ entry:
}

define dso_local signext i32 @TailCallLocal1(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallLocal1:
; CHECK-ALL-LABEL: TailCallLocal1:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep7@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep7@l
; CHECK-S: .localentry TailCallLocal1, .Lfunc_lep7-.Lfunc_gep7
Expand Down Expand Up @@ -230,7 +234,7 @@ entry:
}

define dso_local signext i32 @TailCallLocal2(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallLocal2:
; CHECK-ALL-LABEL: TailCallLocal2:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep8@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep8@l
; CHECK-S: .localentry TailCallLocal2, .Lfunc_lep8-.Lfunc_gep8
Expand Down Expand Up @@ -259,9 +263,10 @@ entry:
}

define dso_local signext i32 @TailCallLocalNoGlobal(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallLocalNoGlobal:
; CHECK-ALL-LABEL: TailCallLocalNoGlobal:
; CHECK-S: .localentry TailCallLocalNoGlobal, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-P9: .localentry TailCallLocalNoGlobal, .Lfunc_lep9-.Lfunc_gep9
; CHECK-ALL: # %bb.0: # %entry
; CHECK-S-NEXT: mflr r0
; CHECK-S-NEXT: std r0, 16(r1)
; CHECK-S-NEXT: stdu r1, -32(r1)
Expand All @@ -278,7 +283,7 @@ entry:
}

define dso_local signext i32 @TailCallExtern1(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallExtern1:
; CHECK-ALL-LABEL: TailCallExtern1:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep10@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep10@l
; CHECK-S: .localentry TailCallExtern1, .Lfunc_lep10-.Lfunc_gep10
Expand Down Expand Up @@ -306,7 +311,7 @@ entry:
}

define dso_local signext i32 @TailCallExtern2(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallExtern2:
; CHECK-ALL-LABEL: TailCallExtern2:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep11@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep11@l
; CHECK-S: .localentry TailCallExtern2, .Lfunc_lep11-.Lfunc_gep11
Expand Down Expand Up @@ -335,7 +340,7 @@ entry:
}

define dso_local signext i32 @TailCallExternNoGlobal(i32 signext %a) local_unnamed_addr {
; CHECK-S-LABEL: TailCallExternNoGlobal:
; CHECK-ALL-LABEL: TailCallExternNoGlobal:
; CHECK-S: .localentry TailCallExternNoGlobal, 1
; CHECK-S-NEXT: # %bb.0: # %entry
; CHECK-S-NEXT: mflr r0
Expand All @@ -354,7 +359,7 @@ entry:
}

define dso_local signext i32 @IndirectCall1(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: IndirectCall1:
; CHECK-ALL-LABEL: IndirectCall1:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep13@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep13@l
; CHECK-S: .localentry IndirectCall1, .Lfunc_lep13-.Lfunc_gep13
Expand Down Expand Up @@ -390,7 +395,7 @@ entry:
}

define dso_local signext i32 @IndirectCall2(i32 signext %a, i32 signext %b) local_unnamed_addr {
; CHECK-S-LABEL: IndirectCall2:
; CHECK-ALL-LABEL: IndirectCall2:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep14@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep14@l
; CHECK-S: .localentry IndirectCall2, .Lfunc_lep14-.Lfunc_gep14
Expand Down Expand Up @@ -427,7 +432,7 @@ entry:
}

define dso_local signext i32 @IndirectCall3(i32 signext %a, i32 signext %b, i32 (i32)* nocapture %call_param) local_unnamed_addr {
; CHECK-S-LABEL: IndirectCall3:
; CHECK-ALL-LABEL: IndirectCall3:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep15@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep15@l
; CHECK-S: .localentry IndirectCall3, .Lfunc_lep15-.Lfunc_gep15
Expand Down Expand Up @@ -461,7 +466,7 @@ entry:
}

define dso_local signext i32 @IndirectCallNoGlobal(i32 signext %a, i32 signext %b, i32 (i32)* nocapture %call_param) local_unnamed_addr {
; CHECK-S-LABEL: IndirectCallNoGlobal:
; CHECK-ALL-LABEL: IndirectCallNoGlobal:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep16@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep16@l
; CHECK-S: .localentry IndirectCallNoGlobal, .Lfunc_lep16-.Lfunc_gep16
Expand Down Expand Up @@ -493,7 +498,7 @@ entry:
}

define dso_local signext i32 @IndirectCallOnly(i32 signext %a, i32 (i32)* nocapture %call_param) local_unnamed_addr {
; CHECK-S-LABEL: IndirectCallOnly:
; CHECK-ALL-LABEL: IndirectCallOnly:
; CHECK-S: addis r2, r12, .TOC.-.Lfunc_gep17@ha
; CHECK-S-NEXT: addi r2, r2, .TOC.-.Lfunc_gep17@l
; CHECK-S: .localentry IndirectCallOnly, .Lfunc_lep17-.Lfunc_gep17
Expand Down

0 comments on commit 95b718e

Please sign in to comment.