88define i32 @masked_merge0_demorgan (i32 %a0 , i32 %a1 , i32 %a2 ) {
99; NOBMI-LABEL: masked_merge0_demorgan:
1010; NOBMI: # %bb.0:
11- ; NOBMI-NEXT: orl %edi, %edx
12- ; NOBMI-NEXT: movl %edi, %eax
13- ; NOBMI-NEXT: notl %eax
14- ; NOBMI-NEXT: orl %esi, %eax
15- ; NOBMI-NEXT: andl %edx, %eax
11+ ; NOBMI-NEXT: movl %esi, %eax
12+ ; NOBMI-NEXT: xorl %edx, %eax
13+ ; NOBMI-NEXT: andl %edi, %eax
14+ ; NOBMI-NEXT: xorl %edx, %eax
1615; NOBMI-NEXT: retq
1716;
1817; BMI-LABEL: masked_merge0_demorgan:
@@ -29,15 +28,22 @@ define i32 @masked_merge0_demorgan(i32 %a0, i32 %a1, i32 %a2) {
2928}
3029
3130define i16 @masked_merge1_demorgan (i16 %a0 , i16 %a1 , i16 %a2 ) {
32- ; CHECK-LABEL: masked_merge1_demorgan:
33- ; CHECK: # %bb.0:
34- ; CHECK-NEXT: orl %edi, %edx
35- ; CHECK-NEXT: movl %edi, %eax
36- ; CHECK-NEXT: notl %eax
37- ; CHECK-NEXT: orl %esi, %eax
38- ; CHECK-NEXT: andl %edx, %eax
39- ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
40- ; CHECK-NEXT: retq
31+ ; NOBMI-LABEL: masked_merge1_demorgan:
32+ ; NOBMI: # %bb.0:
33+ ; NOBMI-NEXT: movl %esi, %eax
34+ ; NOBMI-NEXT: xorl %edx, %eax
35+ ; NOBMI-NEXT: andl %edi, %eax
36+ ; NOBMI-NEXT: xorl %edx, %eax
37+ ; NOBMI-NEXT: # kill: def $ax killed $ax killed $eax
38+ ; NOBMI-NEXT: retq
39+ ;
40+ ; BMI-LABEL: masked_merge1_demorgan:
41+ ; BMI: # %bb.0:
42+ ; BMI-NEXT: andnl %edx, %edi, %eax
43+ ; BMI-NEXT: andl %edi, %esi
44+ ; BMI-NEXT: orl %esi, %eax
45+ ; BMI-NEXT: # kill: def $ax killed $ax killed $eax
46+ ; BMI-NEXT: retq
4147 %not = xor i16 %a0 , -1
4248 %or0 = or i16 %not , %a1
4349 %or1 = or i16 %a0 , %a2
@@ -48,11 +54,8 @@ define i16 @masked_merge1_demorgan(i16 %a0, i16 %a1, i16 %a2) {
4854define i8 @masked_merge2_demorgan (i8 %a0 , i8 %a1 , i8 %a2 ) {
4955; CHECK-LABEL: masked_merge2_demorgan:
5056; CHECK: # %bb.0:
51- ; CHECK-NEXT: movl %edi, %eax
52- ; CHECK-NEXT: notb %al
53- ; CHECK-NEXT: orb %sil, %al
54- ; CHECK-NEXT: orb %sil, %dil
55- ; CHECK-NEXT: andb %dil, %al
57+ ; CHECK-NEXT: movl %esi, %eax
58+ ; CHECK-NEXT: # kill: def $al killed $al killed $eax
5659; CHECK-NEXT: retq
5760 %not = xor i8 %a0 , -1
5861 %or0 = or i8 %not , %a1
@@ -64,13 +67,12 @@ define i8 @masked_merge2_demorgan(i8 %a0, i8 %a1, i8 %a2) {
6467define i64 @masked_merge3_demorgan (i64 %a0 , i64 %a1 , i64 %a2 ) {
6568; NOBMI-LABEL: masked_merge3_demorgan:
6669; NOBMI: # %bb.0:
70+ ; NOBMI-NEXT: movq %rsi, %rax
6771; NOBMI-NEXT: notq %rdx
68- ; NOBMI-NEXT: orq %rdi, %rdx
69- ; NOBMI-NEXT: movq %rdi, %rax
72+ ; NOBMI-NEXT: xorq %rdx, %rax
7073; NOBMI-NEXT: notq %rax
71- ; NOBMI-NEXT: notq %rsi
72- ; NOBMI-NEXT: orq %rsi, %rax
73- ; NOBMI-NEXT: andq %rdx, %rax
74+ ; NOBMI-NEXT: andq %rdi, %rax
75+ ; NOBMI-NEXT: xorq %rdx, %rax
7476; NOBMI-NEXT: retq
7577;
7678; BMI-LABEL: masked_merge3_demorgan:
0 commit comments