To do this while supporting the existing functionality in SelectionDAG of using PGO info, we add the ProfileSummaryInfo and LazyBlockFrequencyInfo analysis dependencies to the instruction selector pass. Then, use the predicate to generate constant pool loads for f32 materialization, if we're targeting optsize/minsize. Differential Revision: https://reviews.llvm.org/D97732
135 lines
3.9 KiB
YAML
135 lines
3.9 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -O0 -mtriple=aarch64-- -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s
|
|
|
|
--- |
|
|
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
|
|
|
define void @imm_s32_gpr() { ret void }
|
|
define void @imm_s64_gpr() { ret void }
|
|
define void @test_f64_cp() { ret void }
|
|
define void @test_f32_cp_optsize() #0 { ret void }
|
|
define void @test_f32_cp_minsize() #1 { ret void }
|
|
|
|
|
|
attributes #0 = { optsize }
|
|
attributes #1 = { minsize }
|
|
|
|
...
|
|
|
|
---
|
|
# Check that we select a 32-bit immediate into a MOVi32imm.
|
|
name: imm_s32_gpr
|
|
legalized: true
|
|
regBankSelected: true
|
|
|
|
registers:
|
|
- { id: 0, class: gpr }
|
|
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: imm_s32_gpr
|
|
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm -1234
|
|
; CHECK: $w0 = COPY [[MOVi32imm]]
|
|
%0(s32) = G_CONSTANT i32 -1234
|
|
$w0 = COPY %0(s32)
|
|
...
|
|
|
|
---
|
|
# Check that we select a 64-bit immediate into a MOVi64imm.
|
|
name: imm_s64_gpr
|
|
legalized: true
|
|
regBankSelected: true
|
|
|
|
registers:
|
|
- { id: 0, class: gpr }
|
|
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: imm_s64_gpr
|
|
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1234
|
|
; CHECK: [[SUBREG_TO_REG:%[0-9]+]]:gpr64all = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32
|
|
; CHECK: $x0 = COPY [[SUBREG_TO_REG]]
|
|
%0(s64) = G_CONSTANT i64 1234
|
|
$x0 = COPY %0(s64)
|
|
...
|
|
|
|
# 64b FP immediates need to be loaded.
|
|
---
|
|
name: test_f64_cp
|
|
legalized: true
|
|
regBankSelected: true
|
|
liveins:
|
|
- { reg: '$d0' }
|
|
body: |
|
|
bb.1 (%ir-block.0):
|
|
liveins: $d0
|
|
|
|
; CHECK-LABEL: name: test_f64_cp
|
|
; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
|
|
; CHECK: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) %const.0
|
|
; CHECK: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) %const.0
|
|
; CHECK: [[FADDDrr:%[0-9]+]]:fpr64 = FADDDrr [[COPY]], [[LDRDui]]
|
|
; CHECK: $d0 = COPY [[FADDDrr]]
|
|
; CHECK: RET_ReallyLR implicit $d0
|
|
%0:fpr(s64) = COPY $d0
|
|
%1:fpr(s64) = G_FCONSTANT double 0x3FEFF7CED916872B
|
|
%2:fpr(s64) = G_FADD %0, %1
|
|
$d0 = COPY %2(s64)
|
|
RET_ReallyLR implicit $d0
|
|
|
|
...
|
|
# 32b FP immediates need to be loaded if using optsize.
|
|
---
|
|
name: test_f32_cp_optsize
|
|
legalized: true
|
|
regBankSelected: true
|
|
liveins:
|
|
- { reg: '$s0' }
|
|
body: |
|
|
bb.1 (%ir-block.0):
|
|
liveins: $s0
|
|
|
|
; CHECK-LABEL: name: test_f32_cp_optsize
|
|
; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
|
|
; CHECK: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) %const.0
|
|
; CHECK: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) %const.0
|
|
; CHECK: [[FADDSrr:%[0-9]+]]:fpr32 = FADDSrr [[COPY]], [[LDRSui]]
|
|
; CHECK: $s0 = COPY [[FADDSrr]]
|
|
; CHECK: RET_ReallyLR implicit $s0
|
|
%0:fpr(s32) = COPY $s0
|
|
%1:fpr(s32) = G_FCONSTANT float 0x3FDB267DE0000000
|
|
%2:fpr(s32) = G_FADD %0, %1
|
|
$s0 = COPY %2(s32)
|
|
RET_ReallyLR implicit $s0
|
|
|
|
...
|
|
# 32b FP immediates need to be loaded if using minsize.
|
|
---
|
|
name: test_f32_cp_minsize
|
|
legalized: true
|
|
regBankSelected: true
|
|
liveins:
|
|
- { reg: '$s0' }
|
|
body: |
|
|
bb.1 (%ir-block.0):
|
|
liveins: $s0
|
|
|
|
; CHECK-LABEL: name: test_f32_cp_minsize
|
|
; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
|
|
; CHECK: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) %const.0
|
|
; CHECK: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) %const.0
|
|
; CHECK: [[FADDSrr:%[0-9]+]]:fpr32 = FADDSrr [[COPY]], [[LDRSui]]
|
|
; CHECK: $s0 = COPY [[FADDSrr]]
|
|
; CHECK: RET_ReallyLR implicit $s0
|
|
%0:fpr(s32) = COPY $s0
|
|
%1:fpr(s32) = G_FCONSTANT float 0x3FDB267DE0000000
|
|
%2:fpr(s32) = G_FADD %0, %1
|
|
$s0 = COPY %2(s32)
|
|
RET_ReallyLR implicit $s0
|
|
|
|
...
|