Files
clang-p2996/llvm/test/CodeGen/AArch64/GlobalISel/select-ubfx.mir
Brendon Cahoon d7d85f72ef [AArch64][GlobalISel] Fix width value for G_SBFX/G_UBFX
When creating G_SBFX/G_UBFX opcodes, the last operand is the
width instead of the bit position. The bit position is used
for the AArch64 SBFM and UBFM instructions. The bit position
is converted to a width if the SBFX/UBFX aliases are generated.
For other SBMF/UBFM aliases, such as shifts, the bit position
is used.

Differential Revision: https://reviews.llvm.org/D101543
2021-04-29 21:54:19 -04:00

114 lines
3.0 KiB
YAML

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
...
---
name: ubfx_s32
legalized: true
regBankSelected: true
tracksRegLiveness: true
body: |
bb.0:
liveins: $w0
; CHECK-LABEL: name: ubfx_s32
; CHECK: liveins: $w0
; CHECK: %copy:gpr32 = COPY $w0
; CHECK: %ubfx:gpr32 = UBFMWri %copy, 0, 9
; CHECK: $w0 = COPY %ubfx
; CHECK: RET_ReallyLR implicit $w0
%copy:gpr(s32) = COPY $w0
%cst1:gpr(s32) = G_CONSTANT i32 0
%cst2:gpr(s32) = G_CONSTANT i32 10
%ubfx:gpr(s32) = G_UBFX %copy, %cst1, %cst2
$w0 = COPY %ubfx
RET_ReallyLR implicit $w0
...
---
name: ubfx_s64
legalized: true
regBankSelected: true
tracksRegLiveness: true
body: |
bb.0:
liveins: $x0
; CHECK-LABEL: name: ubfx_s64
; CHECK: liveins: $x0
; CHECK: %copy:gpr64 = COPY $x0
; CHECK: %ubfx:gpr64 = UBFMXri %copy, 0, 9
; CHECK: $x0 = COPY %ubfx
; CHECK: RET_ReallyLR implicit $x0
%copy:gpr(s64) = COPY $x0
%cst1:gpr(s64) = G_CONSTANT i64 0
%cst2:gpr(s64) = G_CONSTANT i64 10
%ubfx:gpr(s64) = G_UBFX %copy, %cst1, %cst2
$x0 = COPY %ubfx
RET_ReallyLR implicit $x0
...
---
name: ubfx_s32_31_1
legalized: true
regBankSelected: true
tracksRegLiveness: true
body: |
bb.0:
liveins: $w0
; This is just a lsr, so it's okay.
; CHECK-LABEL: name: ubfx_s32_31_1
; CHECK: liveins: $w0
; CHECK: %copy:gpr32 = COPY $w0
; CHECK: %ubfx:gpr32 = UBFMWri %copy, 31, 31
; CHECK: $w0 = COPY %ubfx
; CHECK: RET_ReallyLR implicit $w0
%copy:gpr(s32) = COPY $w0
%cst1:gpr(s32) = G_CONSTANT i32 31
%cst2:gpr(s32) = G_CONSTANT i32 1
%ubfx:gpr(s32) = G_UBFX %copy, %cst1, %cst2
$w0 = COPY %ubfx
RET_ReallyLR implicit $w0
---
name: ubfx_s32_10_5
legalized: true
regBankSelected: true
tracksRegLiveness: true
body: |
bb.0:
liveins: $w0
; CHECK-LABEL: name: ubfx_s32_10_5
; CHECK: liveins: $w0
; CHECK: %copy:gpr32 = COPY $w0
; CHECK: %ubfx:gpr32 = UBFMWri %copy, 10, 14
; CHECK: $w0 = COPY %ubfx
; CHECK: RET_ReallyLR implicit $w0
%copy:gpr(s32) = COPY $w0
%cst1:gpr(s32) = G_CONSTANT i32 10
%cst2:gpr(s32) = G_CONSTANT i32 5
%ubfx:gpr(s32) = G_UBFX %copy, %cst1, %cst2
$w0 = COPY %ubfx
RET_ReallyLR implicit $w0
...
---
name: ubfx_s64_10_5
legalized: true
regBankSelected: true
tracksRegLiveness: true
body: |
bb.0:
liveins: $x0
; CHECK-LABEL: name: ubfx_s64_10_5
; CHECK: liveins: $x0
; CHECK: %copy:gpr64 = COPY $x0
; CHECK: %ubfx:gpr64 = UBFMXri %copy, 10, 14
; CHECK: $x0 = COPY %ubfx
; CHECK: RET_ReallyLR implicit $x0
%copy:gpr(s64) = COPY $x0
%cst1:gpr(s64) = G_CONSTANT i64 10
%cst2:gpr(s64) = G_CONSTANT i64 5
%ubfx:gpr(s64) = G_UBFX %copy, %cst1, %cst2
$x0 = COPY %ubfx
RET_ReallyLR implicit $x0