6
6
7
7
; ====== Scalar bswap.i16 Tests =====
8
8
define i16 @bswap_i16_to_i16_anyext (i16 %a ){
9
- ; CHECK-SD-LABEL: bswap_i16_to_i16 :
9
+ ; CHECK-SD-LABEL: bswap_i16_to_i16_anyext :
10
10
; CHECK-SD: // %bb.0:
11
11
; CHECK-SD-NEXT: rev16 w0, w0
12
12
; CHECK-SD-NEXT: ret
13
13
;
14
- ; CHECK-GI-LABEL: bswap_i16_to_i16 :
14
+ ; CHECK-GI-LABEL: bswap_i16_to_i16_anyext :
15
15
; CHECK-GI: // %bb.0:
16
16
; CHECK-GI-NEXT: rev w8, w0
17
17
; CHECK-GI-NEXT: lsr w0, w8, #16
@@ -23,22 +23,55 @@ declare i16 @llvm.bswap.i16(i16)
23
23
24
24
; The zext here is optimised to an any_extend during isel.
25
25
define i64 @bswap_i16_to_i64_anyext (i16 %a ) {
26
+ ; CHECK-SD-LABEL: bswap_i16_to_i64_anyext:
27
+ ; CHECK-SD: // %bb.0:
28
+ ; CHECK-SD-NEXT: // kill: def $w0 killed $w0 def $x0
29
+ ; CHECK-SD-NEXT: rev16 x8, x0
30
+ ; CHECK-SD-NEXT: lsl x0, x8, #48
31
+ ; CHECK-SD-NEXT: ret
32
+ ;
33
+ ; CHECK-GI-LABEL: bswap_i16_to_i64_anyext:
34
+ ; CHECK-GI: // %bb.0:
35
+ ; CHECK-GI-NEXT: rev w8, w0
36
+ ; CHECK-GI-NEXT: lsr w8, w8, #16
37
+ ; CHECK-GI-NEXT: and x8, x8, #0xffff
38
+ ; CHECK-GI-NEXT: lsl x0, x8, #48
39
+ ; CHECK-GI-NEXT: ret
26
40
%3 = call i16 @llvm.bswap.i16 (i16 %a )
27
41
%4 = zext i16 %3 to i64
28
- %5 = shl i64 %5 , 48
42
+ %5 = shl i64 %4 , 48
29
43
ret i64 %5
30
44
}
31
45
32
46
; The zext here is optimised to an any_extend during isel..
33
47
define i128 @bswap_i16_to_i128_anyext (i16 %a ) {
48
+ ; CHECK-SD-LABEL: bswap_i16_to_i128_anyext:
49
+ ; CHECK-SD: // %bb.0:
50
+ ; CHECK-SD-NEXT: mov w8, w0
51
+ ; CHECK-SD-NEXT: mov x0, xzr
52
+ ; CHECK-SD-NEXT: rev w8, w8
53
+ ; CHECK-SD-NEXT: lsr w8, w8, #16
54
+ ; CHECK-SD-NEXT: lsl x1, x8, #48
55
+ ; CHECK-SD-NEXT: ret
56
+ ;
57
+ ; CHECK-GI-LABEL: bswap_i16_to_i128_anyext:
58
+ ; CHECK-GI: // %bb.0:
59
+ ; CHECK-GI-NEXT: mov w8, w0
60
+ ; CHECK-GI-NEXT: mov x0, xzr
61
+ ; CHECK-GI-NEXT: rev w8, w8
62
+ ; CHECK-GI-NEXT: lsr w8, w8, #16
63
+ ; CHECK-GI-NEXT: bfi x8, x8, #32, #32
64
+ ; CHECK-GI-NEXT: and x8, x8, #0xffff
65
+ ; CHECK-GI-NEXT: lsl x1, x8, #48
66
+ ; CHECK-GI-NEXT: ret
34
67
%3 = call i16 @llvm.bswap.i16 (i16 %a )
35
68
%4 = zext i16 %3 to i128
36
69
%5 = shl i128 %4 , 112
37
- ret i128 %d
70
+ ret i128 %5
38
71
}
39
72
40
73
define i32 @bswap_i16_to_i32_zext (i16 %a ){
41
- ; CHECK-LABEL: bswap_i16_to_i32 :
74
+ ; CHECK-LABEL: bswap_i16_to_i32_zext :
42
75
; CHECK: // %bb.0:
43
76
; CHECK-NEXT: rev w8, w0
44
77
; CHECK-NEXT: lsr w0, w8, #16
0 commit comments