Commit 6dbd0eac authored by Fangrui Song's avatar Fangrui Song
Browse files

[test] Split some tests which test both static and pic relocation models

TargetMachine::shouldAssumeDSOLocal currently implies dso_local for
Static. Split some tests so that these `external dso_local global` will
align with the Clang behavior.
parent ab58e4cb
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -O0 -run-pass=legalizer --relocation-model=pic %s -o - | FileCheck %s --check-prefix=PIC

--- |
  target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
  target triple = "aarch64--"
  @var = external global i8
  define i8* @test_global() { ret i8* undef }
...
---
name:            test_global
registers:
  - { id: 0, class: _ }
body: |
  bb.0:

    ; We don't want to lower to G_ADD_LOW when we need a GOT access, or when the code
    ; model isn't 'Small'.

    ; CHECK-LABEL: name: test_global
    ; CHECK: [[ADRP:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @var
    ; CHECK: [[ADD_LOW:%[0-9]+]]:_(p0) = G_ADD_LOW [[ADRP]](p0), target-flags(aarch64-pageoff, aarch64-nc) @var
    ; CHECK: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[ADD_LOW]](p0)
    ; CHECK: $x0 = COPY [[PTRTOINT]](s64)
    ; CMLARGE-LABEL: name: test_global
    ; CMLARGE: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var
    ; CMLARGE: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[GV]](p0)
    ; CMLARGE: $x0 = COPY [[PTRTOINT]](s64)
    ; PIC-LABEL: name: test_global
    ; PIC: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var
    ; PIC: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[GV]](p0)
    ; PIC: $x0 = COPY [[PTRTOINT]](s64)
    %0(p0) = G_GLOBAL_VALUE @var
    %1:_(s64) = G_PTRTOINT %0
    $x0 = COPY %1
...
+1 −2
Original line number Diff line number Diff line
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -O0 -run-pass=legalizer %s -o - | FileCheck %s
# RUN: llc -O0 -run-pass=legalizer --relocation-model=pic %s -o - | FileCheck %s --check-prefix=PIC
# RUN: llc -O0 -run-pass=legalizer --code-model=large %s -o - | FileCheck %s --check-prefix=CMLARGE

--- |
  target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
  target triple = "aarch64--"
  @var = external global i8
  @var = external dso_local global i8
  define i8* @test_global() { ret i8* undef }
...
---
+307 −0
Original line number Diff line number Diff line
# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT

--- |
  target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"

  define void @frame_index() {
    %ptr0 = alloca i64
    ret void
  }

  define i8* @ptr_mask(i8* %in) { ret i8* undef }

  @var_local = global i8 0
  define i8* @global_local() { ret i8* undef }

  @var_got = external dso_local global i8
  define i8* @global_got() { ret i8* undef }

  define void @icmp() { ret void }
  define void @fcmp() { ret void }

  define void @phi() { ret void }

  define void @select() { ret void }
...

---
# CHECK-LABEL: name: frame_index
name:            frame_index
legalized:       true
regBankSelected: true

# CHECK:      registers:
# CHECK-NEXT:  - { id: 0, class: gpr64sp, preferred-register: '' }
registers:
  - { id: 0, class: gpr }

stack:
  - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }

# CHECK:  body:
# CHECK: %0:gpr64sp = ADDXri %stack.0.ptr0, 0, 0
body:             |
  bb.0:
    %0(p0) = G_FRAME_INDEX %stack.0.ptr0
    $x0 = COPY %0(p0)
...

---

---
# CHECK-LABEL: name: ptr_mask
name:            ptr_mask
legalized:       true
regBankSelected: true

# CHECK:  body:
# CHECK: %2:gpr64sp = ANDXri %0, 8060
body:             |
  bb.0:
      liveins: $x0
    %0:gpr(p0) = COPY $x0
    %const:gpr(s64) = G_CONSTANT i64 -8
    %1:gpr(p0) = G_PTRMASK %0, %const
    $x0 = COPY %1(p0)
...

---
# Global defined in the same linkage unit so no GOT is needed
# CHECK-LABEL: name: global_local
name:            global_local
legalized:       true
regBankSelected: true
registers:
  - { id: 0, class: gpr }

# CHECK:  body:
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
body:             |
  bb.0:
    %0(p0) = G_GLOBAL_VALUE @var_local
    $x0 = COPY %0(p0)
...

---
# CHECK-LABEL: name: global_got
name:            global_got
legalized:       true
regBankSelected: true
registers:
  - { id: 0, class: gpr }

# CHECK:  body:
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
body:             |
  bb.0:
    %0(p0) = G_GLOBAL_VALUE @var_got
    $x0 = COPY %0(p0)
...

---
# CHECK-LABEL: name: icmp
name:            icmp
legalized:       true
regBankSelected: true

# CHECK:      registers:
# CHECK-NEXT:  - { id: 0, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 2, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 4, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 5, class: gpr32, preferred-register: '' }
registers:
  - { id: 0, class: gpr }
  - { id: 1, class: gpr }
  - { id: 2, class: gpr }
  - { id: 3, class: gpr }
  - { id: 4, class: gpr }
  - { id: 5, class: gpr }
  - { id: 6, class: gpr }
  - { id: 7, class: gpr }
  - { id: 8, class: gpr }
  - { id: 9, class: gpr }
  - { id: 10, class: gpr }
  - { id: 11, class: gpr }

# CHECK:  body:
# CHECK:    SUBSWrr %0, %0, implicit-def $nzcv
# CHECK:    %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv

# CHECK:    SUBSXrr %2, %2, implicit-def $nzcv
# CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv

# CHECK:    SUBSXrr %4, %4, implicit-def $nzcv
# CHECK:    %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv

body:             |
  bb.0:
    liveins: $w0, $x0

    %0(s32) = COPY $w0
    %1(s32) = G_ICMP intpred(eq), %0, %0
    %6(s1) = G_TRUNC %1(s32)
    %9(s32) = G_ANYEXT %6
    $w0 = COPY %9(s32)

    %2(s64) = COPY $x0
    %3(s32) = G_ICMP intpred(uge), %2, %2
    %7(s1) = G_TRUNC %3(s32)
    %10(s32) = G_ANYEXT %7
    $w0 = COPY %10(s32)

    %4(p0) = COPY $x0
    %5(s32) = G_ICMP intpred(ne), %4, %4
    %8(s1) = G_TRUNC %5(s32)
    %11(s32) = G_ANYEXT %8
    $w0 = COPY %11(s32)
...

---
# CHECK-LABEL: name: fcmp
name:            fcmp
legalized:       true
regBankSelected: true

# CHECK:      registers:
# CHECK-NEXT:  - { id: 0, class: fpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 2, class: fpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 4, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 5, class: gpr32, preferred-register: '' }
registers:
  - { id: 0, class: fpr }
  - { id: 1, class: gpr }
  - { id: 2, class: fpr }
  - { id: 3, class: gpr }
  - { id: 4, class: gpr }
  - { id: 5, class: gpr }
  - { id: 6, class: gpr }
  - { id: 7, class: gpr }

# CHECK:  body:
# CHECK:    FCMPSrr %0, %0, implicit-def $nzcv
# CHECK:    [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv
# CHECK:    [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv
# CHECK:    %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]]

# CHECK:    FCMPDrr %2, %2, implicit-def $nzcv
# CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv

body:             |
  bb.0:
    liveins: $w0, $x0

    %0(s32) = COPY $s0
    %1(s32) = G_FCMP floatpred(one), %0, %0
    %4(s1) = G_TRUNC %1(s32)
    %6(s32) = G_ANYEXT %4
    $w0 = COPY %6(s32)

    %2(s64) = COPY $d0
    %3(s32) = G_FCMP floatpred(uge), %2, %2
    %5(s1) = G_TRUNC %3(s32)
    %7(s32) = G_ANYEXT %5
    $w0 = COPY %7(s32)

...

---
# CHECK-LABEL: name: phi
name:            phi
legalized:       true
regBankSelected: true
tracksRegLiveness: true

# CHECK:      registers:
# CHECK-NEXT:  - { id: 0, class: fpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 1, class: gpr, preferred-register: '' }
# CHECK-NEXT:  - { id: 2, class: fpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
registers:
  - { id: 0, class: fpr }
  - { id: 1, class: gpr }
  - { id: 2, class: fpr }

# CHECK:  body:
# CHECK:    bb.1:
# CHECK:      %2:fpr32 = PHI %0, %bb.0, %2, %bb.1

body:             |
  bb.0:
    liveins: $s0, $w0
    successors: %bb.1
    %0(s32) = COPY $s0
    %3:gpr(s32) = COPY $w0
    %1(s1) = G_TRUNC %3

  bb.1:
    successors: %bb.1, %bb.2
    %2(s32) = PHI %0, %bb.0, %2, %bb.1
    G_BRCOND %1, %bb.1

  bb.2:
    $s0 = COPY %2
    RET_ReallyLR implicit $s0
...

---
# CHECK-LABEL: name: select
name:            select
legalized:       true
regBankSelected: true
tracksRegLiveness: true

# CHECK:      registers:
# CHECK-NEXT:  - { id: 0, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 2, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
# CHECK-NEXT:  - { id: 4, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 5, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 6, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 7, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 8, class: gpr64, preferred-register: '' }
# CHECK-NEXT:  - { id: 9, class: gpr64, preferred-register: '' }
registers:
  - { id: 0, class: gpr }
  - { id: 1, class: gpr }
  - { id: 2, class: gpr }
  - { id: 3, class: gpr }
  - { id: 4, class: gpr }
  - { id: 5, class: gpr }
  - { id: 6, class: gpr }
  - { id: 7, class: gpr }
  - { id: 8, class: gpr }
  - { id: 9, class: gpr }

# CHECK:  body:
# CHECK:      ANDSWri %10, 0, implicit-def $nzcv
# CHECK:      %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv
# CHECK:      ANDSWri %10, 0, implicit-def $nzcv
# CHECK:      %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv
# CHECK:      ANDSWri %10, 0, implicit-def $nzcv
# CHECK:      %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv
body:             |
  bb.0:
    liveins: $w0, $w1, $w2
    %10:gpr(s32) = COPY $w0
    %0(s1) = G_TRUNC %10

    %1(s32) = COPY $w1
    %2(s32) = COPY $w2
    %3(s32) = G_SELECT %0, %1, %2
    $w0 = COPY %3(s32)

    %4(s64) = COPY $x0
    %5(s64) = COPY $x1
    %6(s64) = G_SELECT %0, %4, %5
    $x0 = COPY %6(s64)

    %7(p0) = COPY $x0
    %8(p0) = COPY $x1
    %9(p0) = G_SELECT %0, %7, %8
    $x0 = COPY %9(p0)
...
+0 −3
Original line number Diff line number Diff line
# RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=IOS
# RUN: llc -O0 -mtriple=aarch64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-DEFAULT
# RUN: llc -O0 -mtriple=aarch64-linux-gnu -relocation-model=pic -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-PIC

--- |
@@ -78,7 +77,6 @@ registers:

# CHECK:  body:
# IOS: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
# LINUX-PIC: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_local
body:             |
  bb.0:
@@ -96,7 +94,6 @@ registers:

# CHECK:  body:
# IOS: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_got
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
# LINUX-PIC: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_got
body:             |
  bb.0:
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
# Test widening and narrowing on test bit operations using subregister copies
# or SUBREG_TO_REG.
--- |
 @glob = external unnamed_addr global i1, align 4
 @glob = external dso_local unnamed_addr global i1, align 4
 define void @s1_no_copy() { ret void }
 define void @s16_no_copy() { ret void }
 define void @p0_no_copy() { ret void }
Loading