[AArch64] Add PreTest for optimizing MOV to ORR

This commit is contained in:
hanbeom
2024-05-20 09:41:51 +01:00
committed by David Green
parent f5211d79b9
commit d3d6565c24
2 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s
define i64 @test0x1234567812345678() {
; CHECK-LABEL: test0x1234567812345678:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #22136 // =0x5678
; CHECK-NEXT: movk x0, #4660, lsl #16
; CHECK-NEXT: movk x0, #22136, lsl #32
; CHECK-NEXT: movk x0, #4660, lsl #48
; CHECK-NEXT: ret
ret i64 u0x1234567812345678
}
define i64 @test0xff3456ffff3456ff() {
; CHECK-LABEL: test0xff3456ffff3456ff:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #22271 // =0x56ff
; CHECK-NEXT: movk x0, #65332, lsl #16
; CHECK-NEXT: movk x0, #22271, lsl #32
; CHECK-NEXT: movk x0, #65332, lsl #48
; CHECK-NEXT: ret
ret i64 u0xff3456ffff3456ff
}
define i64 @test0x00345600345600() {
; CHECK-LABEL: test0x00345600345600:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #22016 // =0x5600
; CHECK-NEXT: movk x0, #52, lsl #16
; CHECK-NEXT: movk x0, #13398, lsl #32
; CHECK-NEXT: ret
ret i64 u0x00345600345600
}
define i64 @test0x5555555555555555() {
; CHECK-LABEL: test0x5555555555555555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
; CHECK-NEXT: ret
ret i64 u0x5555555555555555
}
define i64 @test0x5055555550555555() {
; CHECK-LABEL: test0x5055555550555555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
; CHECK-NEXT: and x0, x0, #0xf0fffffff0ffffff
; CHECK-NEXT: ret
ret i64 u0x5055555550555555
}
define i64 @test0x0000555555555555() {
; CHECK-LABEL: test0x0000555555555555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
; CHECK-NEXT: movk x0, #0, lsl #48
; CHECK-NEXT: ret
ret i64 u0x0000555555555555
}
define i64 @test0x0000555500005555() {
; CHECK-LABEL: test0x0000555500005555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #21845 // =0x5555
; CHECK-NEXT: movk x0, #21845, lsl #32
; CHECK-NEXT: ret
ret i64 u0x0000555500005555
}
define i64 @testu0xffff5555ffff5555() {
; CHECK-LABEL: testu0xffff5555ffff5555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #-43691 // =0xffffffffffff5555
; CHECK-NEXT: movk x0, #21845, lsl #32
; CHECK-NEXT: ret
ret i64 u0xffff5555ffff5555
}
define i64 @testuu0xfffff555f555f555() {
; CHECK-LABEL: testuu0xfffff555f555f555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #-2731 // =0xfffffffffffff555
; CHECK-NEXT: movk x0, #62805, lsl #16
; CHECK-NEXT: movk x0, #62805, lsl #32
; CHECK-NEXT: ret
ret i64 u0xfffff555f555f555
}
define i64 @testuu0xf555f555f555f555() {
; CHECK-LABEL: testuu0xf555f555f555f555:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
; CHECK-NEXT: orr x0, x0, #0xe001e001e001e001
; CHECK-NEXT: ret
ret i64 u0xf555f555f555f555
}

View File

@@ -0,0 +1,35 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
# RUN: llc -mtriple=aarch64 -verify-machineinstrs -run-pass=aarch64-expand-pseudo -run-pass=aarch64-ldst-opt -debug-only=aarch64-ldst-opt %s -o - | FileCheck %s
---
name: test_fold_repeating_constant_load
tracksRegLiveness: true
body: |
bb.0:
liveins: $x0
; CHECK-LABEL: name: test_fold_repeating_constant_load
; CHECK: liveins: $x0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: renamable $x0 = MOVZXi 49370, 0
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 16
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 32
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 48
; CHECK-NEXT: RET undef $lr, implicit $x0
renamable $x0 = MOVi64imm 90284035103834330
RET_ReallyLR implicit $x0
...
---
name: test_fold_repeating_constant_load_neg
tracksRegLiveness: true
body: |
bb.0:
liveins: $x0
; CHECK-LABEL: name: test_fold_repeating_constant_load_neg
; CHECK: liveins: $x0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: renamable $x0 = MOVZXi 320, 0
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 16
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 32
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 48
; CHECK-NEXT: RET undef $lr, implicit $x0
renamable $x0 = MOVi64imm -4550323095879417536
RET_ReallyLR implicit $x0