117 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+vpclmulqdq,+avx512vl | FileCheck %s3; FIXME: actual vpclmulqdq operation should be eliminated4 5declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8) nounwind readnone6declare <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64>, <4 x i64>, i8) nounwind readnone7declare <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64>, <8 x i64>, i8) nounwind readnone8 9define <2 x i64> @commute_xmm_v1(<2 x i64> %a0, <2 x i64> %a1) {10; CHECK-LABEL: commute_xmm_v1:11; CHECK: # %bb.0:12; CHECK-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm013; CHECK-NEXT: vpxor %xmm0, %xmm0, %xmm014; CHECK-NEXT: retq15 %1 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)16 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a1, <2 x i64> %a0, i8 0)17 %3 = xor <2 x i64> %1, %218 ret <2 x i64> %319}20 21define <2 x i64> @commute_xmm_v2(<2 x i64> %a0, <2 x i64> %a1) {22; CHECK-LABEL: commute_xmm_v2:23; CHECK: # %bb.0:24; CHECK-NEXT: vpclmulqdq $16, %xmm1, %xmm0, %xmm025; CHECK-NEXT: vpxor %xmm0, %xmm0, %xmm026; CHECK-NEXT: retq27 %1 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 16)28 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a1, <2 x i64> %a0, i8 1)29 %3 = xor <2 x i64> %2, %130 ret <2 x i64> %331}32 33define <2 x i64> @commute_xmm_v3(<2 x i64> %a0, <2 x i64> %a1) {34; CHECK-LABEL: commute_xmm_v3:35; CHECK: # %bb.0:36; CHECK-NEXT: vpclmulqdq $17, %xmm1, %xmm0, %xmm037; CHECK-NEXT: vpxor %xmm0, %xmm0, %xmm038; CHECK-NEXT: retq39 %1 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 17)40 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a1, <2 x i64> %a0, i8 17)41 %3 = xor <2 x i64> %2, %142 ret <2 x i64> %343}44 45define <4 x i64> @commute_ymm_v1(<4 x i64> %a0, <4 x i64> %a1) {46; CHECK-LABEL: commute_ymm_v1:47; CHECK: # %bb.0:48; CHECK-NEXT: vpclmulqdq $0, %ymm1, %ymm0, %ymm049; CHECK-NEXT: vpxor %ymm0, %ymm0, %ymm050; CHECK-NEXT: retq51 %1 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a0, <4 x i64> %a1, i8 0)52 %2 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a1, <4 x i64> %a0, i8 0)53 %3 = xor <4 x i64> %1, %254 ret <4 x i64> %355}56 57define <4 x i64> @commute_ymm_v2(<4 x i64> %a0, <4 x i64> %a1) {58; CHECK-LABEL: commute_ymm_v2:59; CHECK: # %bb.0:60; CHECK-NEXT: vpclmulqdq $16, %ymm1, %ymm0, %ymm061; CHECK-NEXT: vpxor %ymm0, %ymm0, %ymm062; CHECK-NEXT: retq63 %1 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a0, <4 x i64> %a1, i8 16)64 %2 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a1, <4 x i64> %a0, i8 1)65 %3 = xor <4 x i64> %2, %166 ret <4 x i64> %367}68 69define <4 x i64> @commute_ymm_v3(<4 x i64> %a0, <4 x i64> %a1) {70; CHECK-LABEL: commute_ymm_v3:71; CHECK: # %bb.0:72; CHECK-NEXT: vpclmulqdq $17, %ymm1, %ymm0, %ymm073; CHECK-NEXT: vpxor %ymm0, %ymm0, %ymm074; CHECK-NEXT: retq75 %1 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a0, <4 x i64> %a1, i8 17)76 %2 = call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a1, <4 x i64> %a0, i8 17)77 %3 = xor <4 x i64> %2, %178 ret <4 x i64> %379}80 81define <8 x i64> @commute_zmm_v1(<8 x i64> %a0, <8 x i64> %a1) {82; CHECK-LABEL: commute_zmm_v1:83; CHECK: # %bb.0:84; CHECK-NEXT: vpclmulqdq $0, %zmm1, %zmm0, %zmm085; CHECK-NEXT: vpxorq %zmm0, %zmm0, %zmm086; CHECK-NEXT: retq87 %1 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a0, <8 x i64> %a1, i8 0)88 %2 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a1, <8 x i64> %a0, i8 0)89 %3 = xor <8 x i64> %1, %290 ret <8 x i64> %391}92 93define <8 x i64> @commute_zmm_v2(<8 x i64> %a0, <8 x i64> %a1) {94; CHECK-LABEL: commute_zmm_v2:95; CHECK: # %bb.0:96; CHECK-NEXT: vpclmulqdq $16, %zmm1, %zmm0, %zmm097; CHECK-NEXT: vpxorq %zmm0, %zmm0, %zmm098; CHECK-NEXT: retq99 %1 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a0, <8 x i64> %a1, i8 16)100 %2 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a1, <8 x i64> %a0, i8 1)101 %3 = xor <8 x i64> %2, %1102 ret <8 x i64> %3103}104 105define <8 x i64> @commute_zmm_v3(<8 x i64> %a0, <8 x i64> %a1) {106; CHECK-LABEL: commute_zmm_v3:107; CHECK: # %bb.0:108; CHECK-NEXT: vpclmulqdq $17, %zmm1, %zmm0, %zmm0109; CHECK-NEXT: vpxorq %zmm0, %zmm0, %zmm0110; CHECK-NEXT: retq111 %1 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a0, <8 x i64> %a1, i8 17)112 %2 = call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a1, <8 x i64> %a0, i8 17)113 %3 = xor <8 x i64> %2, %1114 ret <8 x i64> %3115}116 117