247 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc %s -mtriple=aarch64 -mattr=+v8.3a,+sha3 -o - | FileCheck %s3 4define <2 x i64> @test_vsha512h(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {5; CHECK-LABEL: test_vsha512h:6; CHECK: // %bb.0: // %entry7; CHECK-NEXT: sha512h q0, q1, v2.2d8; CHECK-NEXT: ret9entry:10 %vsha512h.i = tail call <2 x i64> @llvm.aarch64.crypto.sha512h(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)11 ret <2 x i64> %vsha512h.i12}13 14define <2 x i64> @test_vsha512h2(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {15; CHECK-LABEL: test_vsha512h2:16; CHECK: // %bb.0: // %entry17; CHECK-NEXT: sha512h2 q0, q1, v2.2d18; CHECK-NEXT: ret19entry:20 %vsha512h2.i = tail call <2 x i64> @llvm.aarch64.crypto.sha512h2(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)21 ret <2 x i64> %vsha512h2.i22}23 24define <2 x i64> @test_vsha512su0(<2 x i64> %a, <2 x i64> %b) {25; CHECK-LABEL: test_vsha512su0:26; CHECK: // %bb.0: // %entry27; CHECK-NEXT: sha512su0 v0.2d, v1.2d28; CHECK-NEXT: ret29entry:30 %vsha512su0.i = tail call <2 x i64> @llvm.aarch64.crypto.sha512su0(<2 x i64> %a, <2 x i64> %b)31 ret <2 x i64> %vsha512su0.i32}33 34define <2 x i64> @test_vsha512su1(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {35; CHECK-LABEL: test_vsha512su1:36; CHECK: // %bb.0: // %entry37; CHECK-NEXT: sha512su1 v0.2d, v1.2d, v2.2d38; CHECK-NEXT: ret39entry:40 %vsha512su1.i = tail call <2 x i64> @llvm.aarch64.crypto.sha512su1(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)41 ret <2 x i64> %vsha512su1.i42}43 44define <2 x i64> @test_vrax1(<2 x i64> %a, <2 x i64> %b) {45; CHECK-LABEL: test_vrax1:46; CHECK: // %bb.0: // %entry47; CHECK-NEXT: rax1 v0.2d, v0.2d, v1.2d48; CHECK-NEXT: ret49entry:50 %vrax1.i = tail call <2 x i64> @llvm.aarch64.crypto.rax1(<2 x i64> %a, <2 x i64> %b)51 ret <2 x i64> %vrax1.i52}53 54define <2 x i64> @test_vxar(<2 x i64> %a, <2 x i64> %b) {55; CHECK-LABEL: test_vxar:56; CHECK: // %bb.0: // %entry57; CHECK-NEXT: xar v0.2d, v0.2d, v1.2d, #158; CHECK-NEXT: ret59entry:60 %vxar.i = tail call <2 x i64> @llvm.aarch64.crypto.xar(<2 x i64> %a, <2 x i64> %b, i64 1)61 ret <2 x i64> %vxar.i62}63 64define <16 x i8> @test_bcax_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {65; CHECK-LABEL: test_bcax_8:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b68; CHECK-NEXT: ret69entry:70 %vbcax_8.i = tail call <16 x i8> @llvm.aarch64.crypto.bcaxu.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c)71 ret <16 x i8> %vbcax_8.i72}73 74define <16 x i8> @test_eor3_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {75; CHECK-LABEL: test_eor3_8:76; CHECK: // %bb.0: // %entry77; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b78; CHECK-NEXT: ret79entry:80 %veor3_8.i = tail call <16 x i8> @llvm.aarch64.crypto.eor3u.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c)81 ret <16 x i8> %veor3_8.i82}83 84define <16 x i8> @test_bcax_s8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {85; CHECK-LABEL: test_bcax_s8:86; CHECK: // %bb.0: // %entry87; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b88; CHECK-NEXT: ret89entry:90 %vbcax_8.i = tail call <16 x i8> @llvm.aarch64.crypto.bcaxs.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c)91 ret <16 x i8> %vbcax_8.i92}93 94define <16 x i8> @test_eor3_s8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {95; CHECK-LABEL: test_eor3_s8:96; CHECK: // %bb.0: // %entry97; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b98; CHECK-NEXT: ret99entry:100 %veor3_8.i = tail call <16 x i8> @llvm.aarch64.crypto.eor3s.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c)101 ret <16 x i8> %veor3_8.i102}103 104define <8 x i16> @test_bcax_16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {105; CHECK-LABEL: test_bcax_16:106; CHECK: // %bb.0: // %entry107; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b108; CHECK-NEXT: ret109entry:110 %vbcax_16.i = tail call <8 x i16> @llvm.aarch64.crypto.bcaxu.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c)111 ret <8 x i16> %vbcax_16.i112}113 114define <8 x i16> @test_eor3_16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {115; CHECK-LABEL: test_eor3_16:116; CHECK: // %bb.0: // %entry117; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b118; CHECK-NEXT: ret119entry:120 %veor3_16.i = tail call <8 x i16> @llvm.aarch64.crypto.eor3u.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c)121 ret <8 x i16> %veor3_16.i122}123 124define <8 x i16> @test_bcax_s16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {125; CHECK-LABEL: test_bcax_s16:126; CHECK: // %bb.0: // %entry127; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b128; CHECK-NEXT: ret129entry:130 %vbcax_16.i = tail call <8 x i16> @llvm.aarch64.crypto.bcaxs.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c)131 ret <8 x i16> %vbcax_16.i132}133 134define <8 x i16> @test_eor3_s16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {135; CHECK-LABEL: test_eor3_s16:136; CHECK: // %bb.0: // %entry137; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b138; CHECK-NEXT: ret139entry:140 %veor3_16.i = tail call <8 x i16> @llvm.aarch64.crypto.eor3s.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c)141 ret <8 x i16> %veor3_16.i142}143 144define <4 x i32> @test_bcax_32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {145; CHECK-LABEL: test_bcax_32:146; CHECK: // %bb.0: // %entry147; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b148; CHECK-NEXT: ret149entry:150 %vbcax_32.i = tail call <4 x i32> @llvm.aarch64.crypto.bcaxu.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)151 ret <4 x i32> %vbcax_32.i152}153 154define <4 x i32> @test_eor3_32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {155; CHECK-LABEL: test_eor3_32:156; CHECK: // %bb.0: // %entry157; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b158; CHECK-NEXT: ret159entry:160 %veor3_32.i = tail call <4 x i32> @llvm.aarch64.crypto.eor3u.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)161 ret <4 x i32> %veor3_32.i162}163 164define <4 x i32> @test_bcax_s32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {165; CHECK-LABEL: test_bcax_s32:166; CHECK: // %bb.0: // %entry167; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b168; CHECK-NEXT: ret169entry:170 %vbcax_32.i = tail call <4 x i32> @llvm.aarch64.crypto.bcaxs.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)171 ret <4 x i32> %vbcax_32.i172}173 174define <4 x i32> @test_eor3_s32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {175; CHECK-LABEL: test_eor3_s32:176; CHECK: // %bb.0: // %entry177; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b178; CHECK-NEXT: ret179entry:180 %veor3_32.i = tail call <4 x i32> @llvm.aarch64.crypto.eor3s.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)181 ret <4 x i32> %veor3_32.i182}183 184define <2 x i64> @test_bcax_64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {185; CHECK-LABEL: test_bcax_64:186; CHECK: // %bb.0: // %entry187; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b188; CHECK-NEXT: ret189entry:190 %vbcax_64.i = tail call <2 x i64> @llvm.aarch64.crypto.bcaxu.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)191 ret <2 x i64> %vbcax_64.i192}193 194define <2 x i64> @test_eor3_64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {195; CHECK-LABEL: test_eor3_64:196; CHECK: // %bb.0: // %entry197; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b198; CHECK-NEXT: ret199entry:200 %veor3_64.i = tail call <2 x i64> @llvm.aarch64.crypto.eor3u.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)201 ret <2 x i64> %veor3_64.i202}203 204define <2 x i64> @test_bcax_s64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {205; CHECK-LABEL: test_bcax_s64:206; CHECK: // %bb.0: // %entry207; CHECK-NEXT: bcax v0.16b, v0.16b, v1.16b, v2.16b208; CHECK-NEXT: ret209entry:210 %vbcax_64.i = tail call <2 x i64> @llvm.aarch64.crypto.bcaxs.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)211 ret <2 x i64> %vbcax_64.i212}213 214define <2 x i64> @test_eor3_s64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {215; CHECK-LABEL: test_eor3_s64:216; CHECK: // %bb.0: // %entry217; CHECK-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b218; CHECK-NEXT: ret219entry:220 %veor3_64.i = tail call <2 x i64> @llvm.aarch64.crypto.eor3s.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c)221 ret <2 x i64> %veor3_64.i222}223 224declare <2 x i64> @llvm.aarch64.crypto.sha512h(<2 x i64>, <2 x i64>, <2 x i64>)225declare <2 x i64> @llvm.aarch64.crypto.sha512h2(<2 x i64>, <2 x i64>, <2 x i64>)226declare <2 x i64> @llvm.aarch64.crypto.sha512su0(<2 x i64>, <2 x i64>)227declare <2 x i64> @llvm.aarch64.crypto.sha512su1(<2 x i64>, <2 x i64>, <2 x i64>)228declare <2 x i64> @llvm.aarch64.crypto.rax1(<2 x i64>, <2 x i64>)229declare <2 x i64> @llvm.aarch64.crypto.xar(<2 x i64>, <2 x i64>, i64 immarg)230declare <16 x i8> @llvm.aarch64.crypto.bcaxu.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)231declare <8 x i16> @llvm.aarch64.crypto.bcaxu.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)232declare <4 x i32> @llvm.aarch64.crypto.bcaxu.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)233declare <2 x i64> @llvm.aarch64.crypto.bcaxu.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)234declare <16 x i8> @llvm.aarch64.crypto.bcaxs.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)235declare <8 x i16> @llvm.aarch64.crypto.bcaxs.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)236declare <4 x i32> @llvm.aarch64.crypto.bcaxs.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)237declare <2 x i64> @llvm.aarch64.crypto.bcaxs.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)238declare <16 x i8> @llvm.aarch64.crypto.eor3u.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)239declare <8 x i16> @llvm.aarch64.crypto.eor3u.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)240declare <4 x i32> @llvm.aarch64.crypto.eor3u.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)241declare <2 x i64> @llvm.aarch64.crypto.eor3u.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)242declare <16 x i8> @llvm.aarch64.crypto.eor3s.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)243declare <8 x i16> @llvm.aarch64.crypto.eor3s.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)244declare <4 x i32> @llvm.aarch64.crypto.eor3s.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)245declare <2 x i64> @llvm.aarch64.crypto.eor3s.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)246 247