@@ -55,3 +55,121 @@ define i1 @or_uno(float %a, float %b) {
55
55
%e = or i1 %c , %d
56
56
ret i1 %e
57
57
}
58
+
59
+ define <4 x i1 > @and_ord_vec (<4 x float > %a , <4 x float > %b ) {
60
+ ; X86-LABEL: and_ord_vec:
61
+ ; X86: # %bb.0:
62
+ ; X86-NEXT: pushl %eax
63
+ ; X86-NEXT: .cfi_def_cfa_offset 8
64
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
65
+ ; X86-NEXT: fstps (%esp) # 4-byte Folded Spill
66
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
67
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
68
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
69
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
70
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
71
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
72
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
73
+ ; X86-NEXT: fucompp
74
+ ; X86-NEXT: fnstsw %ax
75
+ ; X86-NEXT: fucompp
76
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
77
+ ; X86-NEXT: sahf
78
+ ; X86-NEXT: fnstsw %ax
79
+ ; X86-NEXT: fucompp
80
+ ; X86-NEXT: setnp %dh
81
+ ; X86-NEXT: shlb $2, %dh
82
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
83
+ ; X86-NEXT: sahf
84
+ ; X86-NEXT: fnstsw %ax
85
+ ; X86-NEXT: flds (%esp) # 4-byte Folded Reload
86
+ ; X86-NEXT: fxch %st(1)
87
+ ; X86-NEXT: fucompp
88
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
89
+ ; X86-NEXT: setnp %dl
90
+ ; X86-NEXT: shlb $3, %dl
91
+ ; X86-NEXT: orb %dh, %dl
92
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
93
+ ; X86-NEXT: sahf
94
+ ; X86-NEXT: setnp %dh
95
+ ; X86-NEXT: fnstsw %ax
96
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
97
+ ; X86-NEXT: sahf
98
+ ; X86-NEXT: setnp %al
99
+ ; X86-NEXT: addb %al, %al
100
+ ; X86-NEXT: orb %dh, %al
101
+ ; X86-NEXT: orb %dl, %al
102
+ ; X86-NEXT: movb %al, (%ecx)
103
+ ; X86-NEXT: movl %ecx, %eax
104
+ ; X86-NEXT: popl %ecx
105
+ ; X86-NEXT: .cfi_def_cfa_offset 4
106
+ ; X86-NEXT: retl $4
107
+ ;
108
+ ; X64-LABEL: and_ord_vec:
109
+ ; X64: # %bb.0:
110
+ ; X64-NEXT: cmpordps %xmm1, %xmm0
111
+ ; X64-NEXT: retq
112
+ %c = fcmp ord <4 x float > %a , %a
113
+ %d = fcmp ord <4 x float > %b , %b
114
+ %e = and <4 x i1 > %c , %d
115
+ ret <4 x i1 > %e
116
+ }
117
+
118
+ define <4 x i1 > @or_uno_vec (<4 x float > %a , <4 x float > %b ) {
119
+ ; X86-LABEL: or_uno_vec:
120
+ ; X86: # %bb.0:
121
+ ; X86-NEXT: pushl %eax
122
+ ; X86-NEXT: .cfi_def_cfa_offset 8
123
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
124
+ ; X86-NEXT: fstps (%esp) # 4-byte Folded Spill
125
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
126
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
127
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
128
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
129
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
130
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
131
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
132
+ ; X86-NEXT: fucompp
133
+ ; X86-NEXT: fnstsw %ax
134
+ ; X86-NEXT: fucompp
135
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
136
+ ; X86-NEXT: sahf
137
+ ; X86-NEXT: fnstsw %ax
138
+ ; X86-NEXT: fucompp
139
+ ; X86-NEXT: setp %dh
140
+ ; X86-NEXT: shlb $2, %dh
141
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
142
+ ; X86-NEXT: sahf
143
+ ; X86-NEXT: fnstsw %ax
144
+ ; X86-NEXT: flds (%esp) # 4-byte Folded Reload
145
+ ; X86-NEXT: fxch %st(1)
146
+ ; X86-NEXT: fucompp
147
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
148
+ ; X86-NEXT: setp %dl
149
+ ; X86-NEXT: shlb $3, %dl
150
+ ; X86-NEXT: orb %dh, %dl
151
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
152
+ ; X86-NEXT: sahf
153
+ ; X86-NEXT: setp %dh
154
+ ; X86-NEXT: fnstsw %ax
155
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
156
+ ; X86-NEXT: sahf
157
+ ; X86-NEXT: setp %al
158
+ ; X86-NEXT: addb %al, %al
159
+ ; X86-NEXT: orb %dh, %al
160
+ ; X86-NEXT: orb %dl, %al
161
+ ; X86-NEXT: movb %al, (%ecx)
162
+ ; X86-NEXT: movl %ecx, %eax
163
+ ; X86-NEXT: popl %ecx
164
+ ; X86-NEXT: .cfi_def_cfa_offset 4
165
+ ; X86-NEXT: retl $4
166
+ ;
167
+ ; X64-LABEL: or_uno_vec:
168
+ ; X64: # %bb.0:
169
+ ; X64-NEXT: cmpunordps %xmm1, %xmm0
170
+ ; X64-NEXT: retq
171
+ %c = fcmp uno <4 x float > %a , %a
172
+ %d = fcmp uno <4 x float > %b , %b
173
+ %e = or <4 x i1 > %c , %d
174
+ ret <4 x i1 > %e
175
+ }
0 commit comments