@@ -62,18 +62,13 @@ define i64 @read_flags_reg_pressure() nounwind {
6262; CHECK-NEXT: pushq %r13
6363; CHECK-NEXT: pushq %r12
6464; CHECK-NEXT: pushq %rbx
65- ; CHECK-NEXT: subq $16, %rsp
6665; CHECK-NEXT: #APP
6766; CHECK-NEXT: #NO_APP
68- ; CHECK-NEXT: movq %rdx, (%rsp) # 8-byte Spill
6967; CHECK-NEXT: pushfq
70- ; CHECK-NEXT: popq %rdx
71- ; CHECK-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
72- ; CHECK-NEXT: movq (%rsp), %rdx # 8-byte Reload
68+ ; CHECK-NEXT: popq %rbp
7369; CHECK-NEXT: #APP
7470; CHECK-NEXT: #NO_APP
75- ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
76- ; CHECK-NEXT: addq $16, %rsp
71+ ; CHECK-NEXT: movq %rbp, %rax
7772; CHECK-NEXT: popq %rbx
7873; CHECK-NEXT: popq %r12
7974; CHECK-NEXT: popq %r13
@@ -94,8 +89,6 @@ define i64 @read_flags_reg_pressure() nounwind {
9489; WIN64-NEXT: pushq %rbx
9590; WIN64-NEXT: subq $16, %rsp
9691; WIN64-NEXT: leaq {{[0-9]+}}(%rsp), %rbp
97- ; WIN64-NEXT: pushq %rbp
98- ; WIN64-NEXT: pushq %rax
9992; WIN64-NEXT: #APP
10093; WIN64-NEXT: #NO_APP
10194; WIN64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
@@ -105,8 +98,6 @@ define i64 @read_flags_reg_pressure() nounwind {
10598; WIN64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload
10699; WIN64-NEXT: #APP
107100; WIN64-NEXT: #NO_APP
108- ; WIN64-NEXT: addq $8, %rsp
109- ; WIN64-NEXT: popq %rbp
110101; WIN64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
111102; WIN64-NEXT: addq $16, %rsp
112103; WIN64-NEXT: popq %rbx
@@ -118,25 +109,24 @@ define i64 @read_flags_reg_pressure() nounwind {
118109; WIN64-NEXT: popq %r15
119110; WIN64-NEXT: popq %rbp
120111; WIN64-NEXT: retq
121- %1 = tail call { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } asm sideeffect "" , "={ax},={bx},={cx},={dx},={si},={di},={bp},={r8},={r9},={r10},={r11},={r12},={r13},={r14},={r15},~{dirflag},~{fpsr},~{flags}" ()
122- %2 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 0
123- %3 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 1
124- %4 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 2
125- %5 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 3
126- %6 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 4
127- %7 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 5
128- %8 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 6
129- %9 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 7
130- %10 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 8
131- %11 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 9
132- %12 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 10
133- %13 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 11
134- %14 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 12
135- %15 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 13
136- %16 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 14
137- %17 = tail call i64 @llvm.x86.flags.read.u64 ()
138- tail call void asm sideeffect "" , "{ax},{bx},{cx},{dx},{si},{di},{bp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}" (i64 %2 , i64 %3 , i64 %4 , i64 %5 , i64 %6 , i64 %7 , i64 %8 , i64 %9 , i64 %10 , i64 %11 , i64 %12 , i64 %13 , i64 %14 , i64 %15 , i64 %16 )
139- ret i64 %17
112+ %1 = tail call { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } asm sideeffect "" , "={ax},={bx},={cx},={dx},={si},={di},={r8},={r9},={r10},={r11},={r12},={r13},={r14},={r15},~{dirflag},~{fpsr},~{flags}" ()
113+ %2 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 0
114+ %3 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 1
115+ %4 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 2
116+ %5 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 3
117+ %6 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 4
118+ %7 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 5
119+ %8 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 6
120+ %9 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 7
121+ %10 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 8
122+ %11 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 9
123+ %12 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 10
124+ %13 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 11
125+ %14 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 12
126+ %15 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %1 , 13
127+ %flags = tail call i64 @llvm.x86.flags.read.u64 ()
128+ tail call void asm sideeffect "" , "{ax},{bx},{cx},{dx},{si},{di},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}" (i64 %2 , i64 %3 , i64 %4 , i64 %5 , i64 %6 , i64 %7 , i64 %8 , i64 %9 , i64 %10 , i64 %11 , i64 %12 , i64 %13 , i64 %14 , i64 %15 )
129+ ret i64 %flags
140130}
141131
142132define void @write_flags_reg_pressure (i64 noundef %0 ) nounwind {
@@ -148,18 +138,13 @@ define void @write_flags_reg_pressure(i64 noundef %0) nounwind {
148138; CHECK-NEXT: pushq %r13
149139; CHECK-NEXT: pushq %r12
150140; CHECK-NEXT: pushq %rbx
151- ; CHECK-NEXT: subq $16, %rsp
152- ; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
141+ ; CHECK-NEXT: movq %rdi, %rbp
153142; CHECK-NEXT: #APP
154143; CHECK-NEXT: #NO_APP
155- ; CHECK-NEXT: movq %rdx, (%rsp) # 8-byte Spill
156- ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload
157- ; CHECK-NEXT: pushq %rdx
144+ ; CHECK-NEXT: pushq %rbp
158145; CHECK-NEXT: popfq
159- ; CHECK-NEXT: movq (%rsp), %rdx # 8-byte Reload
160146; CHECK-NEXT: #APP
161147; CHECK-NEXT: #NO_APP
162- ; CHECK-NEXT: addq $16, %rsp
163148; CHECK-NEXT: popq %rbx
164149; CHECK-NEXT: popq %r12
165150; CHECK-NEXT: popq %r13
@@ -181,8 +166,6 @@ define void @write_flags_reg_pressure(i64 noundef %0) nounwind {
181166; WIN64-NEXT: subq $16, %rsp
182167; WIN64-NEXT: leaq {{[0-9]+}}(%rsp), %rbp
183168; WIN64-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
184- ; WIN64-NEXT: pushq %rbp
185- ; WIN64-NEXT: pushq %rax
186169; WIN64-NEXT: #APP
187170; WIN64-NEXT: #NO_APP
188171; WIN64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
@@ -192,8 +175,6 @@ define void @write_flags_reg_pressure(i64 noundef %0) nounwind {
192175; WIN64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload
193176; WIN64-NEXT: #APP
194177; WIN64-NEXT: #NO_APP
195- ; WIN64-NEXT: popq %rax
196- ; WIN64-NEXT: popq %rbp
197178; WIN64-NEXT: addq $16, %rsp
198179; WIN64-NEXT: popq %rbx
199180; WIN64-NEXT: popq %rdi
@@ -204,23 +185,22 @@ define void @write_flags_reg_pressure(i64 noundef %0) nounwind {
204185; WIN64-NEXT: popq %r15
205186; WIN64-NEXT: popq %rbp
206187; WIN64-NEXT: retq
207- %2 = tail call { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } asm sideeffect "" , "={ax},={bx},={cx},={dx},={si},={di},={bp},={r8},={r9},={r10},={r11},={r12},={r13},={r14},={r15},~{dirflag},~{fpsr},~{flags}" ()
208- %3 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 0
209- %4 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 1
210- %5 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 2
211- %6 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 3
212- %7 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 4
213- %8 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 5
214- %9 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 6
215- %10 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 7
216- %11 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 8
217- %12 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 9
218- %13 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 10
219- %14 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 11
220- %15 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 12
221- %16 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 13
222- %17 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 14
188+ %2 = tail call { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } asm sideeffect "" , "={ax},={bx},={cx},={dx},={si},={di},={r8},={r9},={r10},={r11},={r12},={r13},={r14},={r15},~{dirflag},~{fpsr},~{flags}" ()
189+ %3 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 0
190+ %4 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 1
191+ %5 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 2
192+ %6 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 3
193+ %7 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 4
194+ %8 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 5
195+ %9 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 6
196+ %10 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 7
197+ %11 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 8
198+ %12 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 9
199+ %13 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 10
200+ %14 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 11
201+ %15 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 12
202+ %16 = extractvalue { i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 , i64 } %2 , 13
223203 tail call void @llvm.x86.flags.write.u64 (i64 %0 )
224- tail call void asm sideeffect "" , "{ax},{bx},{cx},{dx},{si},{di},{bp},{ r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}" (i64 %3 , i64 %4 , i64 %5 , i64 %6 , i64 %7 , i64 %8 , i64 %9 , i64 %10 , i64 %11 , i64 %12 , i64 %13 , i64 %14 , i64 %15 , i64 %16 , i64 %17 )
204+ tail call void asm sideeffect "" , "{ax},{bx},{cx},{dx},{si},{di},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}" (i64 %3 , i64 %4 , i64 %5 , i64 %6 , i64 %7 , i64 %8 , i64 %9 , i64 %10 , i64 %11 , i64 %12 , i64 %13 , i64 %14 , i64 %15 , i64 %16 )
225205 ret void
226206}
0 commit comments