Skip to content

Commit d3d6565

Browse files
ParkHanbumdavemgreen
authored andcommitted
[AArch64] Add PreTest for optimizing MOV to ORR
1 parent f5211d7 commit d3d6565

File tree

2 files changed

+132
-0
lines changed

2 files changed

+132
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s
3+
4+
define i64 @test0x1234567812345678() {
5+
; CHECK-LABEL: test0x1234567812345678:
6+
; CHECK: // %bb.0:
7+
; CHECK-NEXT: mov x0, #22136 // =0x5678
8+
; CHECK-NEXT: movk x0, #4660, lsl #16
9+
; CHECK-NEXT: movk x0, #22136, lsl #32
10+
; CHECK-NEXT: movk x0, #4660, lsl #48
11+
; CHECK-NEXT: ret
12+
ret i64 u0x1234567812345678
13+
}
14+
15+
define i64 @test0xff3456ffff3456ff() {
16+
; CHECK-LABEL: test0xff3456ffff3456ff:
17+
; CHECK: // %bb.0:
18+
; CHECK-NEXT: mov x0, #22271 // =0x56ff
19+
; CHECK-NEXT: movk x0, #65332, lsl #16
20+
; CHECK-NEXT: movk x0, #22271, lsl #32
21+
; CHECK-NEXT: movk x0, #65332, lsl #48
22+
; CHECK-NEXT: ret
23+
ret i64 u0xff3456ffff3456ff
24+
}
25+
26+
define i64 @test0x00345600345600() {
27+
; CHECK-LABEL: test0x00345600345600:
28+
; CHECK: // %bb.0:
29+
; CHECK-NEXT: mov x0, #22016 // =0x5600
30+
; CHECK-NEXT: movk x0, #52, lsl #16
31+
; CHECK-NEXT: movk x0, #13398, lsl #32
32+
; CHECK-NEXT: ret
33+
ret i64 u0x00345600345600
34+
}
35+
36+
define i64 @test0x5555555555555555() {
37+
; CHECK-LABEL: test0x5555555555555555:
38+
; CHECK: // %bb.0:
39+
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
40+
; CHECK-NEXT: ret
41+
ret i64 u0x5555555555555555
42+
}
43+
44+
define i64 @test0x5055555550555555() {
45+
; CHECK-LABEL: test0x5055555550555555:
46+
; CHECK: // %bb.0:
47+
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
48+
; CHECK-NEXT: and x0, x0, #0xf0fffffff0ffffff
49+
; CHECK-NEXT: ret
50+
ret i64 u0x5055555550555555
51+
}
52+
53+
define i64 @test0x0000555555555555() {
54+
; CHECK-LABEL: test0x0000555555555555:
55+
; CHECK: // %bb.0:
56+
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
57+
; CHECK-NEXT: movk x0, #0, lsl #48
58+
; CHECK-NEXT: ret
59+
ret i64 u0x0000555555555555
60+
}
61+
62+
define i64 @test0x0000555500005555() {
63+
; CHECK-LABEL: test0x0000555500005555:
64+
; CHECK: // %bb.0:
65+
; CHECK-NEXT: mov x0, #21845 // =0x5555
66+
; CHECK-NEXT: movk x0, #21845, lsl #32
67+
; CHECK-NEXT: ret
68+
ret i64 u0x0000555500005555
69+
}
70+
71+
define i64 @testu0xffff5555ffff5555() {
72+
; CHECK-LABEL: testu0xffff5555ffff5555:
73+
; CHECK: // %bb.0:
74+
; CHECK-NEXT: mov x0, #-43691 // =0xffffffffffff5555
75+
; CHECK-NEXT: movk x0, #21845, lsl #32
76+
; CHECK-NEXT: ret
77+
ret i64 u0xffff5555ffff5555
78+
}
79+
80+
define i64 @testuu0xfffff555f555f555() {
81+
; CHECK-LABEL: testuu0xfffff555f555f555:
82+
; CHECK: // %bb.0:
83+
; CHECK-NEXT: mov x0, #-2731 // =0xfffffffffffff555
84+
; CHECK-NEXT: movk x0, #62805, lsl #16
85+
; CHECK-NEXT: movk x0, #62805, lsl #32
86+
; CHECK-NEXT: ret
87+
ret i64 u0xfffff555f555f555
88+
}
89+
90+
define i64 @testuu0xf555f555f555f555() {
91+
; CHECK-LABEL: testuu0xf555f555f555f555:
92+
; CHECK: // %bb.0:
93+
; CHECK-NEXT: mov x0, #6148914691236517205 // =0x5555555555555555
94+
; CHECK-NEXT: orr x0, x0, #0xe001e001e001e001
95+
; CHECK-NEXT: ret
96+
ret i64 u0xf555f555f555f555
97+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# 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
3+
---
4+
name: test_fold_repeating_constant_load
5+
tracksRegLiveness: true
6+
body: |
7+
bb.0:
8+
liveins: $x0
9+
; CHECK-LABEL: name: test_fold_repeating_constant_load
10+
; CHECK: liveins: $x0
11+
; CHECK-NEXT: {{ $}}
12+
; CHECK-NEXT: renamable $x0 = MOVZXi 49370, 0
13+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 16
14+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 32
15+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 48
16+
; CHECK-NEXT: RET undef $lr, implicit $x0
17+
renamable $x0 = MOVi64imm 90284035103834330
18+
RET_ReallyLR implicit $x0
19+
...
20+
---
21+
name: test_fold_repeating_constant_load_neg
22+
tracksRegLiveness: true
23+
body: |
24+
bb.0:
25+
liveins: $x0
26+
; CHECK-LABEL: name: test_fold_repeating_constant_load_neg
27+
; CHECK: liveins: $x0
28+
; CHECK-NEXT: {{ $}}
29+
; CHECK-NEXT: renamable $x0 = MOVZXi 320, 0
30+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 16
31+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 320, 32
32+
; CHECK-NEXT: renamable $x0 = MOVKXi $x0, 49370, 48
33+
; CHECK-NEXT: RET undef $lr, implicit $x0
34+
renamable $x0 = MOVi64imm -4550323095879417536
35+
RET_ReallyLR implicit $x0

0 commit comments

Comments
 (0)