@@ -834,6 +834,140 @@ define amdgpu_kernel void @s_and_u64_sext_with_sregs(ptr addrspace(1) %out, ptr
834834 store i64 %and , ptr addrspace (1 ) %out , align 8
835835 ret void
836836}
837+
838+ define <2 x i128 > @v_and_v2i128 (<2 x i128 > %a , <2 x i128 > %b ) {
839+ ; GFX7-LABEL: v_and_v2i128:
840+ ; GFX7: ; %bb.0:
841+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
842+ ; GFX7-NEXT: v_and_b32_e32 v0, v0, v8
843+ ; GFX7-NEXT: v_and_b32_e32 v1, v1, v9
844+ ; GFX7-NEXT: v_and_b32_e32 v2, v2, v10
845+ ; GFX7-NEXT: v_and_b32_e32 v3, v3, v11
846+ ; GFX7-NEXT: v_and_b32_e32 v4, v4, v12
847+ ; GFX7-NEXT: v_and_b32_e32 v5, v5, v13
848+ ; GFX7-NEXT: v_and_b32_e32 v6, v6, v14
849+ ; GFX7-NEXT: v_and_b32_e32 v7, v7, v15
850+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
851+ ;
852+ ; GFX9-LABEL: v_and_v2i128:
853+ ; GFX9: ; %bb.0:
854+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
855+ ; GFX9-NEXT: v_and_b32_e32 v0, v0, v8
856+ ; GFX9-NEXT: v_and_b32_e32 v1, v1, v9
857+ ; GFX9-NEXT: v_and_b32_e32 v2, v2, v10
858+ ; GFX9-NEXT: v_and_b32_e32 v3, v3, v11
859+ ; GFX9-NEXT: v_and_b32_e32 v4, v4, v12
860+ ; GFX9-NEXT: v_and_b32_e32 v5, v5, v13
861+ ; GFX9-NEXT: v_and_b32_e32 v6, v6, v14
862+ ; GFX9-NEXT: v_and_b32_e32 v7, v7, v15
863+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
864+ ;
865+ ; GFX8-LABEL: v_and_v2i128:
866+ ; GFX8: ; %bb.0:
867+ ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
868+ ; GFX8-NEXT: v_and_b32_e32 v0, v0, v8
869+ ; GFX8-NEXT: v_and_b32_e32 v1, v1, v9
870+ ; GFX8-NEXT: v_and_b32_e32 v2, v2, v10
871+ ; GFX8-NEXT: v_and_b32_e32 v3, v3, v11
872+ ; GFX8-NEXT: v_and_b32_e32 v4, v4, v12
873+ ; GFX8-NEXT: v_and_b32_e32 v5, v5, v13
874+ ; GFX8-NEXT: v_and_b32_e32 v6, v6, v14
875+ ; GFX8-NEXT: v_and_b32_e32 v7, v7, v15
876+ ; GFX8-NEXT: s_setpc_b64 s[30:31]
877+ ;
878+ ; GFX10-LABEL: v_and_v2i128:
879+ ; GFX10: ; %bb.0:
880+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
881+ ; GFX10-NEXT: v_and_b32_e32 v0, v0, v8
882+ ; GFX10-NEXT: v_and_b32_e32 v1, v1, v9
883+ ; GFX10-NEXT: v_and_b32_e32 v2, v2, v10
884+ ; GFX10-NEXT: v_and_b32_e32 v3, v3, v11
885+ ; GFX10-NEXT: v_and_b32_e32 v4, v4, v12
886+ ; GFX10-NEXT: v_and_b32_e32 v5, v5, v13
887+ ; GFX10-NEXT: v_and_b32_e32 v6, v6, v14
888+ ; GFX10-NEXT: v_and_b32_e32 v7, v7, v15
889+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
890+ ;
891+ ; GFX11-LABEL: v_and_v2i128:
892+ ; GFX11: ; %bb.0:
893+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
894+ ; GFX11-NEXT: v_and_b32_e32 v0, v0, v8
895+ ; GFX11-NEXT: v_and_b32_e32 v1, v1, v9
896+ ; GFX11-NEXT: v_and_b32_e32 v2, v2, v10
897+ ; GFX11-NEXT: v_and_b32_e32 v3, v3, v11
898+ ; GFX11-NEXT: v_and_b32_e32 v4, v4, v12
899+ ; GFX11-NEXT: v_and_b32_e32 v5, v5, v13
900+ ; GFX11-NEXT: v_and_b32_e32 v6, v6, v14
901+ ; GFX11-NEXT: v_and_b32_e32 v7, v7, v15
902+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
903+ %and = and <2 x i128 > %a , %b
904+ ret <2 x i128 > %and
905+ }
906+
907+ define <2 x i128 > @v_and_v2i128_inline_imm (<2 x i128 > %a ) {
908+ ; GFX7-LABEL: v_and_v2i128_inline_imm:
909+ ; GFX7: ; %bb.0:
910+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
911+ ; GFX7-NEXT: v_and_b32_e32 v0, 64, v0
912+ ; GFX7-NEXT: v_and_b32_e32 v4, 64, v4
913+ ; GFX7-NEXT: v_mov_b32_e32 v1, 0
914+ ; GFX7-NEXT: v_mov_b32_e32 v2, 0
915+ ; GFX7-NEXT: v_mov_b32_e32 v3, 0
916+ ; GFX7-NEXT: v_mov_b32_e32 v5, 0
917+ ; GFX7-NEXT: v_mov_b32_e32 v6, 0
918+ ; GFX7-NEXT: v_mov_b32_e32 v7, 0
919+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
920+ ;
921+ ; GFX9-LABEL: v_and_v2i128_inline_imm:
922+ ; GFX9: ; %bb.0:
923+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
924+ ; GFX9-NEXT: v_and_b32_e32 v0, 64, v0
925+ ; GFX9-NEXT: v_and_b32_e32 v4, 64, v4
926+ ; GFX9-NEXT: v_mov_b32_e32 v1, 0
927+ ; GFX9-NEXT: v_mov_b32_e32 v2, 0
928+ ; GFX9-NEXT: v_mov_b32_e32 v3, 0
929+ ; GFX9-NEXT: v_mov_b32_e32 v5, 0
930+ ; GFX9-NEXT: v_mov_b32_e32 v6, 0
931+ ; GFX9-NEXT: v_mov_b32_e32 v7, 0
932+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
933+ ;
934+ ; GFX8-LABEL: v_and_v2i128_inline_imm:
935+ ; GFX8: ; %bb.0:
936+ ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
937+ ; GFX8-NEXT: v_and_b32_e32 v0, 64, v0
938+ ; GFX8-NEXT: v_and_b32_e32 v4, 64, v4
939+ ; GFX8-NEXT: v_mov_b32_e32 v1, 0
940+ ; GFX8-NEXT: v_mov_b32_e32 v2, 0
941+ ; GFX8-NEXT: v_mov_b32_e32 v3, 0
942+ ; GFX8-NEXT: v_mov_b32_e32 v5, 0
943+ ; GFX8-NEXT: v_mov_b32_e32 v6, 0
944+ ; GFX8-NEXT: v_mov_b32_e32 v7, 0
945+ ; GFX8-NEXT: s_setpc_b64 s[30:31]
946+ ;
947+ ; GFX10-LABEL: v_and_v2i128_inline_imm:
948+ ; GFX10: ; %bb.0:
949+ ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
950+ ; GFX10-NEXT: v_and_b32_e32 v0, 64, v0
951+ ; GFX10-NEXT: v_and_b32_e32 v4, 64, v4
952+ ; GFX10-NEXT: v_mov_b32_e32 v1, 0
953+ ; GFX10-NEXT: v_mov_b32_e32 v2, 0
954+ ; GFX10-NEXT: v_mov_b32_e32 v3, 0
955+ ; GFX10-NEXT: v_mov_b32_e32 v5, 0
956+ ; GFX10-NEXT: v_mov_b32_e32 v6, 0
957+ ; GFX10-NEXT: v_mov_b32_e32 v7, 0
958+ ; GFX10-NEXT: s_setpc_b64 s[30:31]
959+ ;
960+ ; GFX11-LABEL: v_and_v2i128_inline_imm:
961+ ; GFX11: ; %bb.0:
962+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
963+ ; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 64, v0
964+ ; GFX11-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v4, 64, v4
965+ ; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v5, 0
966+ ; GFX11-NEXT: v_dual_mov_b32 v6, 0 :: v_dual_mov_b32 v7, 0
967+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
968+ %and = and <2 x i128 > %a , <i128 64 , i128 64 >
969+ ret <2 x i128 > %and
970+ }
837971;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
838972; GFX11-FAKE16: {{.*}}
839973; GFX11-TRUE16: {{.*}}
0 commit comments