Home | History | Annotate | Download | only in GlobalISel
      1 # RUN: llc -O0 -mtriple arm-linux -relocation-model=ropi -mattr=-no-movt,+v8m -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RW-DEFAULT-MOVT,RW-DEFAULT,ROPI-MOVT,ROPI
      2 # RUN: llc -O0 -mtriple arm-linux -relocation-model=ropi -mattr=+no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RW-DEFAULT-NOMOVT,RW-DEFAULT,ROPI-NOMOVT,ROPI
      3 # RUN: llc -O0 -mtriple arm-linux -relocation-model=rwpi -mattr=-no-movt,+v8m -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RWPI-MOVT,RWPI,RO-DEFAULT-MOVT,RO-DEFAULT
      4 # RUN: llc -O0 -mtriple arm-linux -relocation-model=rwpi -mattr=+no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RWPI-NOMOVT,RWPI,RO-DEFAULT-NOMOVT,RO-DEFAULT
      5 # RUN: llc -O0 -mtriple arm-linux -relocation-model=ropi-rwpi -mattr=-no-movt,+v8m -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RWPI-MOVT,RWPI,ROPI-MOVT,ROPI
      6 # RUN: llc -O0 -mtriple arm-linux -relocation-model=ropi-rwpi -mattr=+no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,RWPI-NOMOVT,RWPI,ROPI-NOMOVT,ROPI
      7 --- |
      8   @internal_global = internal global i32 42
      9   define void @test_internal_global() { ret void }
     10 
     11   @external_global = external global i32
     12   define void @test_external_global() { ret void }
     13 
     14   @internal_constant = internal constant i32 42
     15   define void @test_internal_constant() { ret void }
     16 
     17   @external_constant = external constant i32
     18   define void @test_external_constant() { ret void }
     19 ...
     20 ---
     21 name:            test_internal_global
     22 # CHECK-LABEL: name: test_internal_global
     23 legalized:       true
     24 regBankSelected: true
     25 selected:        false
     26 # CHECK: selected: true
     27 registers:
     28   - { id: 0, class: gprb }
     29   - { id: 1, class: gprb }
     30 # RW-DEFAULT-NOMOVT: constants:
     31 # RW-DEFAULT-NOMOVT: id: 0
     32 # RW-DEFAULT-NOMOVT: value: 'i32* @internal_global'
     33 # RWPI-NOMOVT: constants:
     34 # RWPI-NOMOVT: id: 0
     35 # RWPI-NOMOVT: value: 'internal_global(SBREL)'
     36 body:             |
     37   bb.0:
     38     %0(p0) = G_GLOBAL_VALUE @internal_global
     39     ; RW-DEFAULT-MOVT: [[G:%[0-9]+]]:gpr = MOVi32imm @internal_global
     40     ; RW-DEFAULT-NOMOVT: [[G:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
     41     ; RWPI-MOVT: [[OFF:%[0-9]+]]:gpr = MOVi32imm {{.*}} @internal_global
     42     ; RWPI-NOMOVT: [[OFF:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
     43     ; RWPI: [[G:%[0-9]+]]:gpr = ADDrr $r9, [[OFF]], 14, $noreg, $noreg
     44 
     45     %1(s32) = G_LOAD %0(p0) :: (load 4 from @internal_global)
     46     ; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, $noreg :: (load 4 from @internal_global)
     47 
     48     $r0 = COPY %1(s32)
     49     ; CHECK: $r0 = COPY [[V]]
     50 
     51     BX_RET 14, $noreg, implicit $r0
     52     ; CHECK: BX_RET 14, $noreg, implicit $r0
     53 ...
     54 ---
     55 name:            test_external_global
     56 # CHECK-LABEL: name: test_external_global
     57 legalized:       true
     58 regBankSelected: true
     59 selected:        false
     60 # CHECK: selected: true
     61 registers:
     62   - { id: 0, class: gprb }
     63   - { id: 1, class: gprb }
     64 # RW-DEFAULT-NOMOVT: constants:
     65 # RW-DEFAULT-NOMOVT: id: 0
     66 # RW-DEFAULT-NOMOVT: value: 'i32* @external_global'
     67 # RWPI-NOMOVT: constants:
     68 # RWPI-NOMOVT: id: 0
     69 # RWPI-NOMOVT: value: 'external_global(SBREL)'
     70 body:             |
     71   bb.0:
     72     %0(p0) = G_GLOBAL_VALUE @external_global
     73     ; RW-DEFAULT-MOVT: [[G:%[0-9]+]]:gpr = MOVi32imm @external_global
     74     ; RW-DEFAULT-NOMOVT: [[G:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
     75     ; RWPI-MOVT: [[OFF:%[0-9]+]]:gpr = MOVi32imm {{.*}} @external_global
     76     ; RWPI-NOMOVT: [[OFF:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
     77     ; RWPI: [[G:%[0-9]+]]:gpr = ADDrr $r9, [[OFF]], 14, $noreg, $noreg
     78 
     79     %1(s32) = G_LOAD %0(p0) :: (load 4 from @external_global)
     80     ; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, $noreg :: (load 4 from @external_global)
     81 
     82     $r0 = COPY %1(s32)
     83     ; CHECK: $r0 = COPY [[V]]
     84 
     85     BX_RET 14, $noreg, implicit $r0
     86     ; CHECK: BX_RET 14, $noreg, implicit $r0
     87 ...
     88 ---
     89 name:            test_internal_constant
     90 # CHECK-LABEL: name: test_internal_constant
     91 legalized:       true
     92 regBankSelected: true
     93 selected:        false
     94 # CHECK: selected: true
     95 registers:
     96   - { id: 0, class: gprb }
     97   - { id: 1, class: gprb }
     98 # RO-DEFAULT-NOMOVT: constants:
     99 # RO-DEFAULT-NOMOVT: id: 0
    100 # RO-DEFAULT-NOMOVT: value: 'i32* @internal_constant'
    101 body:             |
    102   bb.0:
    103     %0(p0) = G_GLOBAL_VALUE @internal_constant
    104     ; ROPI-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel @internal_constant
    105     ; ROPI-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel @internal_constant
    106     ; RO-DEFAULT-MOVT: [[G:%[0-9]+]]:gpr = MOVi32imm @internal_constant
    107     ; RO-DEFAULT-NOMOVT: [[G:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
    108 
    109     %1(s32) = G_LOAD %0(p0) :: (load 4 from @internal_constant)
    110     ; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, $noreg :: (load 4 from @internal_constant)
    111 
    112     $r0 = COPY %1(s32)
    113     ; CHECK: $r0 = COPY [[V]]
    114 
    115     BX_RET 14, $noreg, implicit $r0
    116     ; CHECK: BX_RET 14, $noreg, implicit $r0
    117 ...
    118 ---
    119 name:            test_external_constant
    120 # CHECK-LABEL: name: test_external_constant
    121 legalized:       true
    122 regBankSelected: true
    123 selected:        false
    124 # CHECK: selected: true
    125 registers:
    126   - { id: 0, class: gprb }
    127   - { id: 1, class: gprb }
    128 # RO-DEFAULT-NOMOVT: constants:
    129 # RO-DEFAULT-NOMOVT: id: 0
    130 # RO-DEFAULT-NOMOVT: value: 'i32* @external_constant'
    131 body:             |
    132   bb.0:
    133     %0(p0) = G_GLOBAL_VALUE @external_constant
    134     ; ROPI-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel @external_constant
    135     ; ROPI-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel @external_constant
    136     ; RO-DEFAULT-MOVT: [[G:%[0-9]+]]:gpr = MOVi32imm @external_constant
    137     ; RO-DEFAULT-NOMOVT: [[G:%[0-9]+]]:gpr = LDRi12 %const.0, 0, 14, $noreg :: (load 4 from constant-pool)
    138 
    139     %1(s32) = G_LOAD %0(p0) :: (load 4 from @external_constant)
    140     ; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, $noreg :: (load 4 from @external_constant)
    141 
    142     $r0 = COPY %1(s32)
    143     ; CHECK: $r0 = COPY [[V]]
    144 
    145     BX_RET 14, $noreg, implicit $r0
    146     ; CHECK: BX_RET 14, $noreg, implicit $r0
    147 ...
    148