@@ -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
1622define dso_local void @store_isnan_f16 (ptr %a , ptr %isnan_a ) local_unnamed_addr {
1723entry:
@@ -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