Skip to content

Commit deeed94

Browse files
committed
Add check for setO
1 parent 6588982 commit deeed94

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

llvm/test/CodeGen/Hexagon/inst_setcc_uno_uo.ll

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,14 @@ entry:
1010
store <32 x i32> %.LS.instance, ptr %arrayidx1, align 4
1111
ret void
1212
}
13-
;; CHECK: store_isnan_f32
14-
;; CHECK: vcmp.eq({{v[0-9]+.w}},{{v[0-9]+.w}})
13+
; CHECK: store_isnan_f32
14+
; CHECK: [[VZERO32:v[0-9]+]] = vxor([[VZERO32]],[[VZERO32]])
15+
; CHECK: [[VLOAD32:v[0-9]+]] = vmemu(r0+#0)
16+
; CHECK: [[VONES32:v[0-9]+]] = vsplat([[RONE32:r[0-9]+]])
17+
; CHECK: {{q[0-9]+}} = vcmp.eq([[VLOAD32]].w,[[VLOAD32]].w)
18+
; CHECK: [[VOUT32:v[0-9]+]] = vmux({{q[0-9]+}},[[VZERO32]],[[VONES32]])
19+
; CHECK: vmemu(r1+#0) = [[VOUT32]]
20+
1521

1622
define dso_local void @store_isnan_f16(ptr %a, ptr %isnan_a) local_unnamed_addr {
1723
entry:
@@ -23,6 +29,46 @@ entry:
2329
store <64 x i16> %conv.LS.instance, ptr %arrayidx1, align 2
2430
ret void
2531
}
32+
; CHECK: store_isnan_f16
33+
; CHECK: [[VZERO16:v[0-9]+]] = vxor([[VZERO16]],[[VZERO16]])
34+
; CHECK: [[VLOAD16:v[0-9]+]] = vmemu(r0+#0)
35+
; CHECK: [[VONES16:v[0-9]+]].h = vsplat([[RONE16:r[0-9]+]])
36+
; CHECK: {{q[0-9]+}} = vcmp.eq([[VLOAD16]].h,[[VLOAD16]].h)
37+
; CHECK: [[VOUT16:v[0-9]+]] = vmux({{q[0-9]+}},[[VZERO16]],[[VONES16]])
38+
; CHECK: vmemu(r1+#0) = [[VOUT16]]
39+
40+
define dso_local void @store_isordered_f32(ptr %a, ptr %isordered_a) local_unnamed_addr {
41+
entry:
42+
%arrayidx = getelementptr inbounds nuw float, ptr %a, i32 0
43+
%0 = load <32 x float>, ptr %arrayidx, align 4
44+
%.vectorized = fcmp ord <32 x float> %0, zeroinitializer
45+
%.LS.instance = zext <32 x i1> %.vectorized to <32 x i32>
46+
%arrayidx1 = getelementptr inbounds nuw i32, ptr %isordered_a, i32 0
47+
store <32 x i32> %.LS.instance, ptr %arrayidx1, align 4
48+
ret void
49+
}
50+
; CHECK: store_isordered_f32
51+
; CHECK: [[V_ZERO32:v[0-9]+]] = vxor([[V_ZERO32]],[[V_ZERO32]])
52+
; CHECK: [[V_LOAD32:v[0-9]+]] = vmemu(r0+#0)
53+
; CHECK: [[V_ONES32:v[0-9]+]] = vsplat([[RO32:r[0-9]+]])
54+
; CHECK: {{q[0-9]+}} = vcmp.eq([[V_LOAD32]].w,[[V_LOAD32]].w)
55+
; CHECK: [[V_OUT32:v[0-9]+]] = vmux({{q[0-9]+}},[[V_ONES32]],[[V_ZERO32]])
56+
; CHECK: vmemu(r1+#0) = [[V_OUT32]]
2657

27-
;; CHECK: store_isnan_f16
28-
;; CHECK: vcmp.eq({{v[0-9]+.h}},{{v[0-9]+.h}})
58+
define dso_local void @store_isordered_f16(ptr %a, ptr %isordered_a) local_unnamed_addr {
59+
entry:
60+
%arrayidx = getelementptr inbounds nuw half, ptr %a, i32 0
61+
%0 = load <64 x half>, ptr %arrayidx, align 2
62+
%.vectorized = fcmp ord <64 x half> %0, zeroinitializer
63+
%conv.LS.instance = zext <64 x i1> %.vectorized to <64 x i16>
64+
%arrayidx1 = getelementptr inbounds nuw i16, ptr %isordered_a, i32 0
65+
store <64 x i16> %conv.LS.instance, ptr %arrayidx1, align 2
66+
ret void
67+
}
68+
; CHECK: store_isordered_f16
69+
; CHECK: [[V_ZERO16:v[0-9]+]] = vxor([[V_ZERO16]],[[V_ZERO16]])
70+
; CHECK: [[V_LOAD16:v[0-9]+]] = vmemu(r0+#0)
71+
; CHECK: [[V_ONES16:v[0-9]+]].h = vsplat([[RO16:r[0-9]+]])
72+
; CHECK: {{q[0-9]+}} = vcmp.eq([[V_LOAD16]].h,[[V_LOAD16]].h)
73+
; CHECK: [[V_OUT16:v[0-9]+]] = vmux({{q[0-9]+}},[[V_ONES16]],[[V_ZERO16]])
74+
; CHECK: vmemu(r1+#0) = [[V_OUT16]]

0 commit comments

Comments
 (0)