@@ -2870,6 +2870,107 @@ define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
28702870 ret <2 x i64 > %tmp4
28712871}
28722872
2873+ define <2 x i32 > @fcmal2xfloat (<2 x float > %A , <2 x float > %B ) {
2874+ ; CHECK-SD-LABEL: fcmal2xfloat:
2875+ ; CHECK-SD: // %bb.0:
2876+ ; CHECK-SD-NEXT: movi v0.2d, #0xffffffffffffffff
2877+ ; CHECK-SD-NEXT: ret
2878+ ;
2879+ ; CHECK-GI-LABEL: fcmal2xfloat:
2880+ ; CHECK-GI: // %bb.0:
2881+ ; CHECK-GI-NEXT: movi v0.2s, #1
2882+ ; CHECK-GI-NEXT: shl v0.2s, v0.2s, #31
2883+ ; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #31
2884+ ; CHECK-GI-NEXT: ret
2885+ %tmp3 = fcmp true <2 x float > %A , %B
2886+ %tmp4 = sext <2 x i1 > %tmp3 to <2 x i32 >
2887+ ret <2 x i32 > %tmp4
2888+ }
2889+
2890+ define <4 x i32 > @fcmal4xfloat (<4 x float > %A , <4 x float > %B ) {
2891+ ; CHECK-SD-LABEL: fcmal4xfloat:
2892+ ; CHECK-SD: // %bb.0:
2893+ ; CHECK-SD-NEXT: movi v0.2d, #0xffffffffffffffff
2894+ ; CHECK-SD-NEXT: ret
2895+ ;
2896+ ; CHECK-GI-LABEL: fcmal4xfloat:
2897+ ; CHECK-GI: // %bb.0:
2898+ ; CHECK-GI-NEXT: mov w8, #1 // =0x1
2899+ ; CHECK-GI-NEXT: fmov s0, w8
2900+ ; CHECK-GI-NEXT: mov v1.16b, v0.16b
2901+ ; CHECK-GI-NEXT: mov v1.h[1], v0.h[0]
2902+ ; CHECK-GI-NEXT: mov v0.h[1], v0.h[0]
2903+ ; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #0
2904+ ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
2905+ ; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]
2906+ ; CHECK-GI-NEXT: shl v0.4s, v1.4s, #31
2907+ ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
2908+ ; CHECK-GI-NEXT: ret
2909+ %tmp3 = fcmp true <4 x float > %A , %B
2910+ %tmp4 = sext <4 x i1 > %tmp3 to <4 x i32 >
2911+ ret <4 x i32 > %tmp4
2912+ }
2913+ define <2 x i64 > @fcmal2xdouble (<2 x double > %A , <2 x double > %B ) {
2914+ ; CHECK-SD-LABEL: fcmal2xdouble:
2915+ ; CHECK-SD: // %bb.0:
2916+ ; CHECK-SD-NEXT: movi v0.2d, #0xffffffffffffffff
2917+ ; CHECK-SD-NEXT: ret
2918+ ;
2919+ ; CHECK-GI-LABEL: fcmal2xdouble:
2920+ ; CHECK-GI: // %bb.0:
2921+ ; CHECK-GI-NEXT: adrp x8, .LCPI221_0
2922+ ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI221_0]
2923+ ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #63
2924+ ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
2925+ ; CHECK-GI-NEXT: ret
2926+ %tmp3 = fcmp true <2 x double > %A , %B
2927+ %tmp4 = sext <2 x i1 > %tmp3 to <2 x i64 >
2928+ ret <2 x i64 > %tmp4
2929+ }
2930+
2931+ define <2 x i32 > @fcmnv2xfloat (<2 x float > %A , <2 x float > %B ) {
2932+ ; CHECK-LABEL: fcmnv2xfloat:
2933+ ; CHECK: // %bb.0:
2934+ ; CHECK-NEXT: movi v0.2d, #0000000000000000
2935+ ; CHECK-NEXT: ret
2936+ %tmp3 = fcmp false <2 x float > %A , %B
2937+ %tmp4 = sext <2 x i1 > %tmp3 to <2 x i32 >
2938+ ret <2 x i32 > %tmp4
2939+ }
2940+
2941+ define <4 x i32 > @fcmnv4xfloat (<4 x float > %A , <4 x float > %B ) {
2942+ ; CHECK-SD-LABEL: fcmnv4xfloat:
2943+ ; CHECK-SD: // %bb.0:
2944+ ; CHECK-SD-NEXT: movi v0.2d, #0000000000000000
2945+ ; CHECK-SD-NEXT: ret
2946+ ;
2947+ ; CHECK-GI-LABEL: fcmnv4xfloat:
2948+ ; CHECK-GI: // %bb.0:
2949+ ; CHECK-GI-NEXT: mov w8, #0 // =0x0
2950+ ; CHECK-GI-NEXT: fmov s0, w8
2951+ ; CHECK-GI-NEXT: mov v1.16b, v0.16b
2952+ ; CHECK-GI-NEXT: mov v1.h[1], v0.h[0]
2953+ ; CHECK-GI-NEXT: mov v0.h[1], v0.h[0]
2954+ ; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #0
2955+ ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
2956+ ; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]
2957+ ; CHECK-GI-NEXT: shl v0.4s, v1.4s, #31
2958+ ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
2959+ ; CHECK-GI-NEXT: ret
2960+ %tmp3 = fcmp false <4 x float > %A , %B
2961+ %tmp4 = sext <4 x i1 > %tmp3 to <4 x i32 >
2962+ ret <4 x i32 > %tmp4
2963+ }
2964+ define <2 x i64 > @fcmnv2xdouble (<2 x double > %A , <2 x double > %B ) {
2965+ ; CHECK-LABEL: fcmnv2xdouble:
2966+ ; CHECK: // %bb.0:
2967+ ; CHECK-NEXT: movi v0.2d, #0000000000000000
2968+ ; CHECK-NEXT: ret
2969+ %tmp3 = fcmp false <2 x double > %A , %B
2970+ %tmp4 = sext <2 x i1 > %tmp3 to <2 x i64 >
2971+ ret <2 x i64 > %tmp4
2972+ }
2973+
28732974define <2 x i32 > @fcmoeqz2xfloat (<2 x float > %A ) {
28742975; CHECK-LABEL: fcmoeqz2xfloat:
28752976; CHECK: // %bb.0:
0 commit comments