11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
33
4+ ; bswap inline assembly should be preserved as-is.
5+
46define i64 @foo (i64 %x ) nounwind {
57; CHECK-LABEL: foo:
68; CHECK: ## %bb.0:
79; CHECK-NEXT: movq %rdi, %rax
10+ ; CHECK-NEXT: ## InlineAsm Start
811; CHECK-NEXT: bswapq %rax
12+ ; CHECK-NEXT: ## InlineAsm End
913; CHECK-NEXT: retq
1014 %asmtmp = tail call i64 asm "bswap $0" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i64 %x ) nounwind
1115 ret i64 %asmtmp
@@ -15,7 +19,9 @@ define i64 @bar(i64 %x) nounwind {
1519; CHECK-LABEL: bar:
1620; CHECK: ## %bb.0:
1721; CHECK-NEXT: movq %rdi, %rax
22+ ; CHECK-NEXT: ## InlineAsm Start
1823; CHECK-NEXT: bswapq %rax
24+ ; CHECK-NEXT: ## InlineAsm End
1925; CHECK-NEXT: retq
2026 %asmtmp = tail call i64 asm "bswapq ${0:q}" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i64 %x ) nounwind
2127 ret i64 %asmtmp
@@ -25,16 +31,20 @@ define i32 @pen(i32 %x) nounwind {
2531; CHECK-LABEL: pen:
2632; CHECK: ## %bb.0:
2733; CHECK-NEXT: movl %edi, %eax
34+ ; CHECK-NEXT: ## InlineAsm Start
2835; CHECK-NEXT: bswapl %eax
36+ ; CHECK-NEXT: ## InlineAsm End
2937; CHECK-NEXT: retq
30- %asmtmp = tail call i32 asm "bswapl ${0:q }" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i32 %x ) nounwind
38+ %asmtmp = tail call i32 asm "bswapl ${0:k }" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i32 %x ) nounwind
3139 ret i32 %asmtmp
3240}
3341
3442define zeroext i16 @s16 (i16 zeroext %x ) nounwind {
3543; CHECK-LABEL: s16:
3644; CHECK: ## %bb.0:
37- ; CHECK-NEXT: rolw $8, %di
45+ ; CHECK-NEXT: ## InlineAsm Start
46+ ; CHECK-NEXT: rorw $8, %di
47+ ; CHECK-NEXT: ## InlineAsm End
3848; CHECK-NEXT: movzwl %di, %eax
3949; CHECK-NEXT: retq
4050 %asmtmp = tail call i16 asm "rorw $$8, ${0:w}" , "=r,0,~{dirflag},~{fpsr},~{flags},~{cc}" (i16 %x ) nounwind
@@ -44,7 +54,9 @@ define zeroext i16 @s16(i16 zeroext %x) nounwind {
4454define zeroext i16 @t16 (i16 zeroext %x ) nounwind {
4555; CHECK-LABEL: t16:
4656; CHECK: ## %bb.0:
47- ; CHECK-NEXT: rolw $8, %di
57+ ; CHECK-NEXT: ## InlineAsm Start
58+ ; CHECK-NEXT: rorw $8, %di
59+ ; CHECK-NEXT: ## InlineAsm End
4860; CHECK-NEXT: movzwl %di, %eax
4961; CHECK-NEXT: retq
5062 %asmtmp = tail call i16 asm "rorw $$8, ${0:w}" , "=r,0,~{cc},~{dirflag},~{fpsr},~{flags}" (i16 %x ) nounwind
@@ -54,7 +66,9 @@ define zeroext i16 @t16(i16 zeroext %x) nounwind {
5466define zeroext i16 @u16 (i16 zeroext %x ) nounwind {
5567; CHECK-LABEL: u16:
5668; CHECK: ## %bb.0:
69+ ; CHECK-NEXT: ## InlineAsm Start
5770; CHECK-NEXT: rolw $8, %di
71+ ; CHECK-NEXT: ## InlineAsm End
5872; CHECK-NEXT: movzwl %di, %eax
5973; CHECK-NEXT: retq
6074 %asmtmp = tail call i16 asm "rolw $$8, ${0:w}" , "=r,0,~{dirflag},~{fpsr},~{flags},~{cc}" (i16 %x ) nounwind
@@ -64,7 +78,9 @@ define zeroext i16 @u16(i16 zeroext %x) nounwind {
6478define zeroext i16 @v16 (i16 zeroext %x ) nounwind {
6579; CHECK-LABEL: v16:
6680; CHECK: ## %bb.0:
81+ ; CHECK-NEXT: ## InlineAsm Start
6782; CHECK-NEXT: rolw $8, %di
83+ ; CHECK-NEXT: ## InlineAsm End
6884; CHECK-NEXT: movzwl %di, %eax
6985; CHECK-NEXT: retq
7086 %asmtmp = tail call i16 asm "rolw $$8, ${0:w}" , "=r,0,~{cc},~{dirflag},~{fpsr},~{flags}" (i16 %x ) nounwind
@@ -75,7 +91,9 @@ define i32 @s32(i32 %x) nounwind {
7591; CHECK-LABEL: s32:
7692; CHECK: ## %bb.0:
7793; CHECK-NEXT: movl %edi, %eax
94+ ; CHECK-NEXT: ## InlineAsm Start
7895; CHECK-NEXT: bswapl %eax
96+ ; CHECK-NEXT: ## InlineAsm End
7997; CHECK-NEXT: retq
8098 %asmtmp = tail call i32 asm "bswap $0" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i32 %x ) nounwind
8199 ret i32 %asmtmp
@@ -85,7 +103,9 @@ define i32 @t32(i32 %x) nounwind {
85103; CHECK-LABEL: t32:
86104; CHECK: ## %bb.0:
87105; CHECK-NEXT: movl %edi, %eax
106+ ; CHECK-NEXT: ## InlineAsm Start
88107; CHECK-NEXT: bswapl %eax
108+ ; CHECK-NEXT: ## InlineAsm End
89109; CHECK-NEXT: retq
90110 %asmtmp = tail call i32 asm "bswap $0" , "=r,0,~{dirflag},~{flags},~{fpsr}" (i32 %x ) nounwind
91111 ret i32 %asmtmp
@@ -95,7 +115,11 @@ define i32 @u32(i32 %x) nounwind {
95115; CHECK-LABEL: u32:
96116; CHECK: ## %bb.0:
97117; CHECK-NEXT: movl %edi, %eax
98- ; CHECK-NEXT: bswapl %eax
118+ ; CHECK-NEXT: ## InlineAsm Start
119+ ; CHECK-NEXT: rorw $8, %ax
120+ ; CHECK-NEXT: rorl $16, %eax
121+ ; CHECK-NEXT: rorw $8, %ax
122+ ; CHECK-NEXT: ## InlineAsm End
99123; CHECK-NEXT: retq
100124 %asmtmp = tail call i32 asm "rorw $$8, ${0:w};rorl $$16, $0;rorw $$8, ${0:w}" , "=r,0,~{cc},~{dirflag},~{flags},~{fpsr}" (i32 %x ) nounwind
101125 ret i32 %asmtmp
@@ -105,7 +129,9 @@ define i64 @s64(i64 %x) nounwind {
105129; CHECK-LABEL: s64:
106130; CHECK: ## %bb.0:
107131; CHECK-NEXT: movq %rdi, %rax
132+ ; CHECK-NEXT: ## InlineAsm Start
108133; CHECK-NEXT: bswapq %rax
134+ ; CHECK-NEXT: ## InlineAsm End
109135; CHECK-NEXT: retq
110136 %asmtmp = tail call i64 asm "bswap ${0:q}" , "=r,0,~{dirflag},~{fpsr},~{flags}" (i64 %x ) nounwind
111137 ret i64 %asmtmp
@@ -115,7 +141,9 @@ define i64 @t64(i64 %x) nounwind {
115141; CHECK-LABEL: t64:
116142; CHECK: ## %bb.0:
117143; CHECK-NEXT: movq %rdi, %rax
144+ ; CHECK-NEXT: ## InlineAsm Start
118145; CHECK-NEXT: bswapq %rax
146+ ; CHECK-NEXT: ## InlineAsm End
119147; CHECK-NEXT: retq
120148 %asmtmp = tail call i64 asm "bswap ${0:q}" , "=r,0,~{fpsr},~{dirflag},~{flags}" (i64 %x ) nounwind
121149 ret i64 %asmtmp
0 commit comments