# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s --- | target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" define void @add_s32_gpr() { ret void } define void @add_s64_gpr() { ret void } define void @add_imm_s32_gpr() { ret void } define void @add_imm_s64_gpr() { ret void } define void @add_imm_s32_gpr_bb() { ret void } define void @sub_s32_gpr() { ret void } define void @sub_s64_gpr() { ret void } define void @or_s32_gpr() { ret void } define void @or_s64_gpr() { ret void } define void @or_v2s32_fpr() { ret void } define void @and_s32_gpr() { ret void } define void @and_s64_gpr() { ret void } define void @shl_s32_gpr() { ret void } define void @shl_s64_gpr() { ret void } define void @lshr_s32_gpr() { ret void } define void @lshr_s64_gpr() { ret void } define void @ashr_s32_gpr() { ret void } define void @ashr_s64_gpr() { ret void } define void @mul_s32_gpr() { ret void } define void @mul_s64_gpr() { ret void } define void @mulh_s64_gpr() { ret void } define void @sdiv_s32_gpr() { ret void } define void @sdiv_s64_gpr() { ret void } define void @udiv_s32_gpr() { ret void } define void @udiv_s64_gpr() { ret void } define void @fadd_s32_fpr() { ret void } define void @fadd_s64_fpr() { ret void } define void @fsub_s32_fpr() { ret void } define void @fsub_s64_fpr() { ret void } define void @fmul_s32_fpr() { ret void } define void @fmul_s64_fpr() { ret void } define void @fdiv_s32_fpr() { ret void } define void @fdiv_s64_fpr() { ret void } ... --- # Check that we select a 32-bit GPR G_ADD into ADDWrr on GPR32. # Also check that we constrain the register class of the COPY to GPR32. # CHECK-LABEL: name: add_s32_gpr name: add_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = ADDWrr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_ADD %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s32_gpr, for 64-bit operations. # CHECK-LABEL: name: add_s64_gpr name: add_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = ADDXrr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_ADD %0, %1 %x0 = COPY %2(s64) ... --- # CHECK-LABEL: name: add_imm_s32_gpr name: add_imm_s32_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr32sp, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr32sp, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %2 = ADDWri %0, 1, 0 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = G_CONSTANT i32 1 %2(s32) = G_ADD %0, %1 %w0 = COPY %2(s32) ... --- # CHECK-LABEL: name: add_imm_s64_gpr name: add_imm_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64sp, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64sp, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %2 = ADDXri %0, 1, 0 body: | bb.0: liveins: %x0, %w1 %0(s64) = COPY %x0 %1(s64) = G_CONSTANT i32 1 %2(s64) = G_ADD %0, %1 %x0 = COPY %2(s64) ... --- # CHECK-LABEL: name: add_imm_s32_gpr_bb name: add_imm_s32_gpr_bb legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr32sp, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr32sp, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: bb.1: # CHECK: %2 = ADDWri %0, 1, 0 body: | bb.0: liveins: %w0, %w1 successors: %bb.1 %0(s32) = COPY %w0 %1(s32) = G_CONSTANT i32 1 G_BR %bb.1 bb.1: %2(s32) = G_ADD %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s32_gpr, for G_SUB operations. # CHECK-LABEL: name: sub_s32_gpr name: sub_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = SUBSWrr %0, %1, implicit-def %nzcv body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_SUB %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_SUB operations. # CHECK-LABEL: name: sub_s64_gpr name: sub_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = SUBSXrr %0, %1, implicit-def %nzcv body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_SUB %0, %1 %x0 = COPY %2(s64) ... --- # Same as add_s32_gpr, for G_OR operations. # CHECK-LABEL: name: or_s32_gpr name: or_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = ORRWrr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_OR %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_OR operations. # CHECK-LABEL: name: or_s64_gpr name: or_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = ORRXrr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_OR %0, %1 %x0 = COPY %2(s64) ... --- # 64-bit G_OR on vector registers. # CHECK-LABEL: name: or_v2s32_fpr name: or_v2s32_fpr legalized: true regBankSelected: true # # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %d0 # CHECK: %1 = COPY %d1 # The actual OR does not matter as long as it is operating # on 64-bit width vector. # CHECK: %2 = ORRv8i8 %0, %1 body: | bb.0: liveins: %d0, %d1 %0(<2 x s32>) = COPY %d0 %1(<2 x s32>) = COPY %d1 %2(<2 x s32>) = G_OR %0, %1 %d0 = COPY %2(<2 x s32>) ... --- # Same as add_s32_gpr, for G_AND operations. # CHECK-LABEL: name: and_s32_gpr name: and_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = ANDWrr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_AND %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_AND operations. # CHECK-LABEL: name: and_s64_gpr name: and_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = ANDXrr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_AND %0, %1 %x0 = COPY %2(s64) ... --- # Same as add_s32_gpr, for G_SHL operations. # CHECK-LABEL: name: shl_s32_gpr name: shl_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = LSLVWr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_SHL %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_SHL operations. # CHECK-LABEL: name: shl_s64_gpr name: shl_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = LSLVXr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_SHL %0, %1 %x0 = COPY %2(s64) ... --- # Same as add_s32_gpr, for G_LSHR operations. # CHECK-LABEL: name: lshr_s32_gpr name: lshr_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = LSRVWr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_LSHR %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_LSHR operations. # CHECK-LABEL: name: lshr_s64_gpr name: lshr_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = LSRVXr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_LSHR %0, %1 %x0 = COPY %2(s64) ... --- # Same as add_s32_gpr, for G_ASHR operations. # CHECK-LABEL: name: ashr_s32_gpr name: ashr_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = ASRVWr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_ASHR %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_ASHR operations. # CHECK-LABEL: name: ashr_s64_gpr name: ashr_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = ASRVXr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_ASHR %0, %1 %x0 = COPY %2(s64) ... --- # Check that we select s32 GPR G_MUL. This is trickier than other binops because # there is only MADDWrrr, and we have to use the WZR physreg. # CHECK-LABEL: name: mul_s32_gpr name: mul_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = MADDWrrr %0, %1, %wzr body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_MUL %0, %1 %w0 = COPY %2(s32) ... --- # Same as mul_s32_gpr for the s64 type. # CHECK-LABEL: name: mul_s64_gpr name: mul_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = MADDXrrr %0, %1, %xzr body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_MUL %0, %1 %x0 = COPY %2(s64) ... --- # Same as mul_s32_gpr for the s64 type. # CHECK-LABEL: name: mulh_s64_gpr name: mulh_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 3, class: gpr64, preferred-register: '' } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = SMULHrr %0, %1 # CHECK: %3 = UMULHrr %0, %1 body: | bb.0: liveins: %x0, %x1 %0:gpr(s64) = COPY %x0 %1:gpr(s64) = COPY %x1 %2:gpr(s64) = G_SMULH %0, %1 %3:gpr(s64) = G_UMULH %0, %1 %x0 = COPY %2(s64) %x0 = COPY %3(s64) ... --- # Same as add_s32_gpr, for G_SDIV operations. # CHECK-LABEL: name: sdiv_s32_gpr name: sdiv_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = SDIVWr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_SDIV %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_SDIV operations. # CHECK-LABEL: name: sdiv_s64_gpr name: sdiv_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = SDIVXr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_SDIV %0, %1 %x0 = COPY %2(s64) ... --- # Same as add_s32_gpr, for G_UDIV operations. # CHECK-LABEL: name: udiv_s32_gpr name: udiv_s32_gpr 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: gpr32, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %w0 # CHECK: %1 = COPY %w1 # CHECK: %2 = UDIVWr %0, %1 body: | bb.0: liveins: %w0, %w1 %0(s32) = COPY %w0 %1(s32) = COPY %w1 %2(s32) = G_UDIV %0, %1 %w0 = COPY %2(s32) ... --- # Same as add_s64_gpr, for G_UDIV operations. # CHECK-LABEL: name: udiv_s64_gpr name: udiv_s64_gpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: gpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' } registers: - { id: 0, class: gpr } - { id: 1, class: gpr } - { id: 2, class: gpr } # CHECK: body: # CHECK: %0 = COPY %x0 # CHECK: %1 = COPY %x1 # CHECK: %2 = UDIVXr %0, %1 body: | bb.0: liveins: %x0, %x1 %0(s64) = COPY %x0 %1(s64) = COPY %x1 %2(s64) = G_UDIV %0, %1 %x0 = COPY %2(s64) ... --- # Check that we select a s32 FPR G_FADD into FADDSrr. # CHECK-LABEL: name: fadd_s32_fpr name: fadd_s32_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %s0 # CHECK: %1 = COPY %s1 # CHECK: %2 = FADDSrr %0, %1 body: | bb.0: liveins: %s0, %s1 %0(s32) = COPY %s0 %1(s32) = COPY %s1 %2(s32) = G_FADD %0, %1 %s0 = COPY %2(s32) ... --- # CHECK-LABEL: name: fadd_s64_fpr name: fadd_s64_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %d0 # CHECK: %1 = COPY %d1 # CHECK: %2 = FADDDrr %0, %1 body: | bb.0: liveins: %d0, %d1 %0(s64) = COPY %d0 %1(s64) = COPY %d1 %2(s64) = G_FADD %0, %1 %d0 = COPY %2(s64) ... --- # CHECK-LABEL: name: fsub_s32_fpr name: fsub_s32_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %s0 # CHECK: %1 = COPY %s1 # CHECK: %2 = FSUBSrr %0, %1 body: | bb.0: liveins: %s0, %s1 %0(s32) = COPY %s0 %1(s32) = COPY %s1 %2(s32) = G_FSUB %0, %1 %s0 = COPY %2(s32) ... --- # CHECK-LABEL: name: fsub_s64_fpr name: fsub_s64_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %d0 # CHECK: %1 = COPY %d1 # CHECK: %2 = FSUBDrr %0, %1 body: | bb.0: liveins: %d0, %d1 %0(s64) = COPY %d0 %1(s64) = COPY %d1 %2(s64) = G_FSUB %0, %1 %d0 = COPY %2(s64) ... --- # CHECK-LABEL: name: fmul_s32_fpr name: fmul_s32_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %s0 # CHECK: %1 = COPY %s1 # CHECK: %2 = FMULSrr %0, %1 body: | bb.0: liveins: %s0, %s1 %0(s32) = COPY %s0 %1(s32) = COPY %s1 %2(s32) = G_FMUL %0, %1 %s0 = COPY %2(s32) ... --- # CHECK-LABEL: name: fmul_s64_fpr name: fmul_s64_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %d0 # CHECK: %1 = COPY %d1 # CHECK: %2 = FMULDrr %0, %1 body: | bb.0: liveins: %d0, %d1 %0(s64) = COPY %d0 %1(s64) = COPY %d1 %2(s64) = G_FMUL %0, %1 %d0 = COPY %2(s64) ... --- # CHECK-LABEL: name: fdiv_s32_fpr name: fdiv_s32_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr32, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %s0 # CHECK: %1 = COPY %s1 # CHECK: %2 = FDIVSrr %0, %1 body: | bb.0: liveins: %s0, %s1 %0(s32) = COPY %s0 %1(s32) = COPY %s1 %2(s32) = G_FDIV %0, %1 %s0 = COPY %2(s32) ... --- # CHECK-LABEL: name: fdiv_s64_fpr name: fdiv_s64_fpr legalized: true regBankSelected: true # CHECK: registers: # CHECK-NEXT: - { id: 0, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 1, class: fpr64, preferred-register: '' } # CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' } registers: - { id: 0, class: fpr } - { id: 1, class: fpr } - { id: 2, class: fpr } # CHECK: body: # CHECK: %0 = COPY %d0 # CHECK: %1 = COPY %d1 # CHECK: %2 = FDIVDrr %0, %1 body: | bb.0: liveins: %d0, %d1 %0(s64) = COPY %d0 %1(s64) = COPY %d1 %2(s64) = G_FDIV %0, %1 %d0 = COPY %2(s64) ...