brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 0f430dc Raw
209 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s3#4# Test using the xro addressing mode with immediates. This should be done for5# wide constants which are preferably selected using a mov rather than an add.6 7...8---9name:            use_xro_cannot_encode_add_lsl10alignment:       411legalized:       true12regBankSelected: true13tracksRegLiveness: true14body:             |15  bb.0:16    liveins: $x017    ; Check that we use the XRO addressing mode when the constant cannot be18    ; represented using an add + lsl.19    ; cst = 000000011100000020    ; cst & 000fffffff000000 != 021    ; CHECK-LABEL: name: use_xro_cannot_encode_add_lsl22    ; CHECK: liveins: $x023    ; CHECK-NEXT: {{  $}}24    ; CHECK-NEXT: %copy:gpr64sp = COPY $x025    ; CHECK-NEXT: %cst:gpr64 = MOVi64imm 458017996826    ; CHECK-NEXT: %load:gpr64 = LDRXroX %copy, %cst, 0, 0 :: (volatile load (s64))27    ; CHECK-NEXT: RET_ReallyLR28    %copy:gpr(p0) = COPY $x029    %cst:gpr(s64) = G_CONSTANT i64 458017996830    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)31    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))32    RET_ReallyLR33 34...35---36name:            use_xro_preferred_mov37alignment:       438legalized:       true39regBankSelected: true40tracksRegLiveness: true41body:             |42  bb.0:43    liveins: $x044    ; Check that we use the XRO addressing mode when the constant can be45    ; represented using a single movk.46    ; cst = 000000000000f00047    ; cst & 000fffffff000000 == 048    ; cst & ffffffffffff0fff != 049    ; CHECK-LABEL: name: use_xro_preferred_mov50    ; CHECK: liveins: $x051    ; CHECK-NEXT: {{  $}}52    ; CHECK-NEXT: %copy:gpr64sp = COPY $x053    ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 6144054    ; CHECK-NEXT: %cst:gpr64 = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_3255    ; CHECK-NEXT: %load:gpr64 = LDRXroX %copy, %cst, 0, 0 :: (volatile load (s64))56    ; CHECK-NEXT: RET_ReallyLR57    %copy:gpr(p0) = COPY $x058    %cst:gpr(s64) = G_CONSTANT i64 6144059    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)60    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))61    RET_ReallyLR62 63...64---65name:            use_xro_negative_imm66alignment:       467legalized:       true68regBankSelected: true69tracksRegLiveness: true70body:             |71  bb.0:72    liveins: $x073    ; Check that this works even if we have a negative immediate.74    ; CHECK-LABEL: name: use_xro_negative_imm75    ; CHECK: liveins: $x076    ; CHECK-NEXT: {{  $}}77    ; CHECK-NEXT: %copy:gpr64sp = COPY $x078    ; CHECK-NEXT: %cst:gpr64 = MOVi64imm -6144079    ; CHECK-NEXT: %load:gpr64 = LDRXroX %copy, %cst, 0, 0 :: (volatile load (s64))80    ; CHECK-NEXT: RET_ReallyLR81    %copy:gpr(p0) = COPY $x082    %cst:gpr(s64) = G_CONSTANT i64 -6144083    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)84    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))85    RET_ReallyLR86 87...88---89name:            dont_use_xro_selectable_imm90alignment:       491legalized:       true92regBankSelected: true93tracksRegLiveness: true94body:             |95  bb.0:96    liveins: $x097    ; Immediates that can be encoded in a LDRXui should be skipped.98    ; CHECK-LABEL: name: dont_use_xro_selectable_imm99    ; CHECK: liveins: $x0100    ; CHECK-NEXT: {{  $}}101    ; CHECK-NEXT: %copy:gpr64sp = COPY $x0102    ; CHECK-NEXT: %load:gpr64 = LDRXui %copy, 2 :: (volatile load (s64))103    ; CHECK-NEXT: RET_ReallyLR104    %copy:gpr(p0) = COPY $x0105    %cst:gpr(s64) = G_CONSTANT i64 16106    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)107    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))108    RET_ReallyLR109 110...111---112name:            dont_use_xro_selectable_negative_imm113alignment:       4114legalized:       true115regBankSelected: true116tracksRegLiveness: true117body:             |118  bb.0:119    liveins: $x0120    ; Immediates that can be encoded in a LDRXui should be skipped.121    ; CHECK-LABEL: name: dont_use_xro_selectable_negative_imm122    ; CHECK: liveins: $x0123    ; CHECK-NEXT: {{  $}}124    ; CHECK-NEXT: %copy:gpr64sp = COPY $x0125    ; CHECK-NEXT: %load:gpr64 = LDURXi %copy, -16 :: (volatile load (s64))126    ; CHECK-NEXT: RET_ReallyLR127    %copy:gpr(p0) = COPY $x0128    %cst:gpr(s64) = G_CONSTANT i64 -16129    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)130    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))131    RET_ReallyLR132 133...134---135name:            dont_use_xro_zero136alignment:       4137legalized:       true138regBankSelected: true139tracksRegLiveness: true140body:             |141  bb.0:142    liveins: $x0143    ; Immediates that can be encoded in a LDRXui should be skipped.144    ; CHECK-LABEL: name: dont_use_xro_zero145    ; CHECK: liveins: $x0146    ; CHECK-NEXT: {{  $}}147    ; CHECK-NEXT: %copy:gpr64sp = COPY $x0148    ; CHECK-NEXT: %load:gpr64 = LDRXui %copy, 0 :: (volatile load (s64))149    ; CHECK-NEXT: RET_ReallyLR150    %copy:gpr(p0) = COPY $x0151    %cst:gpr(s64) = G_CONSTANT i64 0152    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)153    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))154    RET_ReallyLR155 156...157---158name:            dont_use_xro_in_range159alignment:       4160legalized:       true161regBankSelected: true162tracksRegLiveness: true163body:             |164  bb.0:165    liveins: $x0166    ; Check that we skip constants which can be encoded in an add.167    ; 17 is in [0x0, 0xfff]168    ; CHECK-LABEL: name: dont_use_xro_in_range169    ; CHECK: liveins: $x0170    ; CHECK-NEXT: {{  $}}171    ; CHECK-NEXT: %copy:gpr64sp = COPY $x0172    ; CHECK-NEXT: %load:gpr64 = LDURXi %copy, 17 :: (volatile load (s64))173    ; CHECK-NEXT: RET_ReallyLR174    %copy:gpr(p0) = COPY $x0175    %cst:gpr(s64) = G_CONSTANT i64 17176    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)177    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))178    RET_ReallyLR179 180...181---182name:            dont_use_xro_add_lsl183alignment:       4184legalized:       true185regBankSelected: true186tracksRegLiveness: true187body:             |188  bb.0:189    liveins: $x0190    ; Check that we skip when we have an add with an lsl which cannot be191    ; represented as a movk.192    ; cst = 0x0000000000111000193    ; cst & 000fffffff000000 = 0194    ; cst & ffffffffff00ffff != 0195    ; cst & ffffffffffff0fff != 0196    ; CHECK-LABEL: name: dont_use_xro_add_lsl197    ; CHECK: liveins: $x0198    ; CHECK-NEXT: {{  $}}199    ; CHECK-NEXT: %copy:gpr64 = COPY $x0200    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY %copy201    ; CHECK-NEXT: %addr:gpr64sp = ADDXri [[COPY]], 273, 12202    ; CHECK-NEXT: %load:gpr64 = LDRXui %addr, 0 :: (volatile load (s64))203    ; CHECK-NEXT: RET_ReallyLR204    %copy:gpr(p0) = COPY $x0205    %cst:gpr(s64) = G_CONSTANT i64 1118208206    %addr:gpr(p0) = G_PTR_ADD %copy, %cst(s64)207    %load:gpr(s64) = G_LOAD %addr(p0) :: (volatile load (s64))208    RET_ReallyLR209