brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · 594a73f Raw
431 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --extra_scrub2; RUN: llc -mtriple=aarch64 -mattr=+sha3 < %s | FileCheck --check-prefix=SHA3 %s3; RUN: llc -mtriple=aarch64 -mattr=-sha3 < %s | FileCheck --check-prefix=NOSHA3 %s4; RUN: llc -mtriple=aarch64 -mattr=+sve2 < %s | FileCheck --check-prefix=SVE2 %s5; RUN: llc -mtriple=aarch64 -mattr=+sha3,+sve2 < %s | FileCheck --check-prefix=SHA3-SVE2 %s6 7define <16 x i8> @eor3_16x8_left(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {8; SHA3-LABEL: eor3_16x8_left:9; SHA3:       // %bb.0:10; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b11; SHA3-NEXT:    ret12;13; NOSHA3-LABEL: eor3_16x8_left:14; NOSHA3:       // %bb.0:15; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b16; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b17; NOSHA3-NEXT:    ret18;19; SVE2-LABEL: eor3_16x8_left:20; SVE2:       // %bb.0:21; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z222; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z123; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z024; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d25; SVE2-NEXT:    mov v0.16b, v2.16b26; SVE2-NEXT:    ret27;28; SHA3-SVE2-LABEL: eor3_16x8_left:29; SHA3-SVE2:       // %bb.0:30; SHA3-SVE2-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b31; SHA3-SVE2-NEXT:    ret32  %4 = xor <16 x i8> %0, %133  %5 = xor <16 x i8> %2, %434  ret <16 x i8> %535}36 37define <16 x i8> @eor3_16x8_right(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {38; SHA3-LABEL: eor3_16x8_right:39; SHA3:       // %bb.0:40; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b41; SHA3-NEXT:    ret42;43; NOSHA3-LABEL: eor3_16x8_right:44; NOSHA3:       // %bb.0:45; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b46; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b47; NOSHA3-NEXT:    ret48;49; SVE2-LABEL: eor3_16x8_right:50; SVE2:       // %bb.0:51; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z152; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z253; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z054; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d55; SVE2-NEXT:    mov v0.16b, v1.16b56; SVE2-NEXT:    ret57;58; SHA3-SVE2-LABEL: eor3_16x8_right:59; SHA3-SVE2:       // %bb.0:60; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b61; SHA3-SVE2-NEXT:    ret62  %4 = xor <16 x i8> %1, %263  %5 = xor <16 x i8> %4, %064  ret <16 x i8> %565}66 67define <8 x i16> @eor3_8x16_left(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {68; SHA3-LABEL: eor3_8x16_left:69; SHA3:       // %bb.0:70; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b71; SHA3-NEXT:    ret72;73; NOSHA3-LABEL: eor3_8x16_left:74; NOSHA3:       // %bb.0:75; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b76; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b77; NOSHA3-NEXT:    ret78;79; SVE2-LABEL: eor3_8x16_left:80; SVE2:       // %bb.0:81; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z282; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z183; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z084; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d85; SVE2-NEXT:    mov v0.16b, v2.16b86; SVE2-NEXT:    ret87;88; SHA3-SVE2-LABEL: eor3_8x16_left:89; SHA3-SVE2:       // %bb.0:90; SHA3-SVE2-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b91; SHA3-SVE2-NEXT:    ret92  %4 = xor <8 x i16> %0, %193  %5 = xor <8 x i16> %2, %494  ret <8 x i16> %595}96 97define <8 x i16> @eor3_8x16_right(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {98; SHA3-LABEL: eor3_8x16_right:99; SHA3:       // %bb.0:100; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b101; SHA3-NEXT:    ret102;103; NOSHA3-LABEL: eor3_8x16_right:104; NOSHA3:       // %bb.0:105; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b106; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b107; NOSHA3-NEXT:    ret108;109; SVE2-LABEL: eor3_8x16_right:110; SVE2:       // %bb.0:111; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1112; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z2113; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0114; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d115; SVE2-NEXT:    mov v0.16b, v1.16b116; SVE2-NEXT:    ret117;118; SHA3-SVE2-LABEL: eor3_8x16_right:119; SHA3-SVE2:       // %bb.0:120; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b121; SHA3-SVE2-NEXT:    ret122  %4 = xor <8 x i16> %1, %2123  %5 = xor <8 x i16> %4, %0124  ret <8 x i16> %5125}126 127define <4 x i32> @eor3_4x32_left(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {128; SHA3-LABEL: eor3_4x32_left:129; SHA3:       // %bb.0:130; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b131; SHA3-NEXT:    ret132;133; NOSHA3-LABEL: eor3_4x32_left:134; NOSHA3:       // %bb.0:135; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b136; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b137; NOSHA3-NEXT:    ret138;139; SVE2-LABEL: eor3_4x32_left:140; SVE2:       // %bb.0:141; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z2142; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1143; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0144; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d145; SVE2-NEXT:    mov v0.16b, v2.16b146; SVE2-NEXT:    ret147;148; SHA3-SVE2-LABEL: eor3_4x32_left:149; SHA3-SVE2:       // %bb.0:150; SHA3-SVE2-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b151; SHA3-SVE2-NEXT:    ret152  %4 = xor <4 x i32> %0, %1153  %5 = xor <4 x i32> %2, %4154  ret <4 x i32> %5155}156 157define <4 x i32> @eor3_4x32_right(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {158; SHA3-LABEL: eor3_4x32_right:159; SHA3:       // %bb.0:160; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b161; SHA3-NEXT:    ret162;163; NOSHA3-LABEL: eor3_4x32_right:164; NOSHA3:       // %bb.0:165; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b166; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b167; NOSHA3-NEXT:    ret168;169; SVE2-LABEL: eor3_4x32_right:170; SVE2:       // %bb.0:171; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1172; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z2173; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0174; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d175; SVE2-NEXT:    mov v0.16b, v1.16b176; SVE2-NEXT:    ret177;178; SHA3-SVE2-LABEL: eor3_4x32_right:179; SHA3-SVE2:       // %bb.0:180; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b181; SHA3-SVE2-NEXT:    ret182  %4 = xor <4 x i32> %1, %2183  %5 = xor <4 x i32> %4, %0184  ret <4 x i32> %5185}186 187define <2 x i64> @eor3_2x64_left(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {188; SHA3-LABEL: eor3_2x64_left:189; SHA3:       // %bb.0:190; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b191; SHA3-NEXT:    ret192;193; NOSHA3-LABEL: eor3_2x64_left:194; NOSHA3:       // %bb.0:195; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b196; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b197; NOSHA3-NEXT:    ret198;199; SVE2-LABEL: eor3_2x64_left:200; SVE2:       // %bb.0:201; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z2202; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1203; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0204; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d205; SVE2-NEXT:    mov v0.16b, v2.16b206; SVE2-NEXT:    ret207;208; SHA3-SVE2-LABEL: eor3_2x64_left:209; SHA3-SVE2:       // %bb.0:210; SHA3-SVE2-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b211; SHA3-SVE2-NEXT:    ret212  %4 = xor <2 x i64> %0, %1213  %5 = xor <2 x i64> %2, %4214  ret <2 x i64> %5215}216 217define <2 x i64> @eor3_2x64_right(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {218; SHA3-LABEL: eor3_2x64_right:219; SHA3:       // %bb.0:220; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b221; SHA3-NEXT:    ret222;223; NOSHA3-LABEL: eor3_2x64_right:224; NOSHA3:       // %bb.0:225; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b226; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b227; NOSHA3-NEXT:    ret228;229; SVE2-LABEL: eor3_2x64_right:230; SVE2:       // %bb.0:231; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1232; SVE2-NEXT:    // kill: def $q2 killed $q2 def $z2233; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0234; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d235; SVE2-NEXT:    mov v0.16b, v1.16b236; SVE2-NEXT:    ret237;238; SHA3-SVE2-LABEL: eor3_2x64_right:239; SHA3-SVE2:       // %bb.0:240; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b241; SHA3-SVE2-NEXT:    ret242  %4 = xor <2 x i64> %1, %2243  %5 = xor <2 x i64> %4, %0244  ret <2 x i64> %5245}246 247define <2 x i64> @eor3_vnot(<2 x i64> %0, <2 x i64> %1) {248; SHA3-LABEL: eor3_vnot:249; SHA3:       // %bb.0:250; SHA3-NEXT:    eor v0.16b, v0.16b, v1.16b251; SHA3-NEXT:    mvn v0.16b, v0.16b252; SHA3-NEXT:    ret253;254; NOSHA3-LABEL: eor3_vnot:255; NOSHA3:       // %bb.0:256; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b257; NOSHA3-NEXT:    mvn v0.16b, v0.16b258; NOSHA3-NEXT:    ret259;260; SVE2-LABEL: eor3_vnot:261; SVE2:       // %bb.0:262; SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0263; SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1264; SVE2-NEXT:    bsl2n z0.d, z0.d, z0.d, z1.d265; SVE2-NEXT:    // kill: def $q0 killed $q0 killed $z0266; SVE2-NEXT:    ret267;268; SHA3-SVE2-LABEL: eor3_vnot:269; SHA3-SVE2:       // %bb.0:270; SHA3-SVE2-NEXT:    // kill: def $q0 killed $q0 def $z0271; SHA3-SVE2-NEXT:    // kill: def $q1 killed $q1 def $z1272; SHA3-SVE2-NEXT:    bsl2n z0.d, z0.d, z0.d, z1.d273; SHA3-SVE2-NEXT:    // kill: def $q0 killed $q0 killed $z0274; SHA3-SVE2-NEXT:    ret275  %3 = xor <2 x i64> %0, <i64 -1, i64 -1>276  %4 = xor <2 x i64> %3, %1277  ret <2 x i64> %4278}279 280define <1 x i64> @eor3_1x64(<1 x i64> %0, <1 x i64> %1, <1 x i64> %2) {281; SHA3-LABEL: eor3_1x64:282; SHA3:       // %bb.0:283; SHA3-NEXT:    // kill: def $d0 killed $d0 def $q0284; SHA3-NEXT:    // kill: def $d2 killed $d2 def $q2285; SHA3-NEXT:    // kill: def $d1 killed $d1 def $q1286; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b287; SHA3-NEXT:    // kill: def $d0 killed $d0 killed $q0288; SHA3-NEXT:    ret289;290; NOSHA3-LABEL: eor3_1x64:291; NOSHA3:       // %bb.0:292; NOSHA3-NEXT:    eor v1.8b, v1.8b, v2.8b293; NOSHA3-NEXT:    eor v0.8b, v1.8b, v0.8b294; NOSHA3-NEXT:    ret295;296; SVE2-LABEL: eor3_1x64:297; SVE2:       // %bb.0:298; SVE2-NEXT:    // kill: def $d1 killed $d1 def $z1299; SVE2-NEXT:    // kill: def $d2 killed $d2 def $z2300; SVE2-NEXT:    // kill: def $d0 killed $d0 def $z0301; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d302; SVE2-NEXT:    fmov d0, d1303; SVE2-NEXT:    ret304;305; SHA3-SVE2-LABEL: eor3_1x64:306; SHA3-SVE2:       // %bb.0:307; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 def $q0308; SHA3-SVE2-NEXT:    // kill: def $d2 killed $d2 def $q2309; SHA3-SVE2-NEXT:    // kill: def $d1 killed $d1 def $q1310; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b311; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 killed $q0312; SHA3-SVE2-NEXT:    ret313  %4 = xor <1 x i64> %1, %2314  %5 = xor <1 x i64> %4, %0315  ret <1 x i64> %5316}317 318define <2 x i32> @eor3_2x32(<2 x i32> %0, <2 x i32> %1, <2 x i32> %2) {319; SHA3-LABEL: eor3_2x32:320; SHA3:       // %bb.0:321; SHA3-NEXT:    // kill: def $d0 killed $d0 def $q0322; SHA3-NEXT:    // kill: def $d2 killed $d2 def $q2323; SHA3-NEXT:    // kill: def $d1 killed $d1 def $q1324; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b325; SHA3-NEXT:    // kill: def $d0 killed $d0 killed $q0326; SHA3-NEXT:    ret327;328; NOSHA3-LABEL: eor3_2x32:329; NOSHA3:       // %bb.0:330; NOSHA3-NEXT:    eor v1.8b, v1.8b, v2.8b331; NOSHA3-NEXT:    eor v0.8b, v1.8b, v0.8b332; NOSHA3-NEXT:    ret333;334; SVE2-LABEL: eor3_2x32:335; SVE2:       // %bb.0:336; SVE2-NEXT:    // kill: def $d1 killed $d1 def $z1337; SVE2-NEXT:    // kill: def $d2 killed $d2 def $z2338; SVE2-NEXT:    // kill: def $d0 killed $d0 def $z0339; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d340; SVE2-NEXT:    fmov d0, d1341; SVE2-NEXT:    ret342;343; SHA3-SVE2-LABEL: eor3_2x32:344; SHA3-SVE2:       // %bb.0:345; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 def $q0346; SHA3-SVE2-NEXT:    // kill: def $d2 killed $d2 def $q2347; SHA3-SVE2-NEXT:    // kill: def $d1 killed $d1 def $q1348; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b349; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 killed $q0350; SHA3-SVE2-NEXT:    ret351  %4 = xor <2 x i32> %1, %2352  %5 = xor <2 x i32> %4, %0353  ret <2 x i32> %5354}355 356define <4 x i16> @eor3_4x16(<4 x i16> %0, <4 x i16> %1, <4 x i16> %2) {357; SHA3-LABEL: eor3_4x16:358; SHA3:       // %bb.0:359; SHA3-NEXT:    // kill: def $d0 killed $d0 def $q0360; SHA3-NEXT:    // kill: def $d2 killed $d2 def $q2361; SHA3-NEXT:    // kill: def $d1 killed $d1 def $q1362; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b363; SHA3-NEXT:    // kill: def $d0 killed $d0 killed $q0364; SHA3-NEXT:    ret365;366; NOSHA3-LABEL: eor3_4x16:367; NOSHA3:       // %bb.0:368; NOSHA3-NEXT:    eor v1.8b, v1.8b, v2.8b369; NOSHA3-NEXT:    eor v0.8b, v1.8b, v0.8b370; NOSHA3-NEXT:    ret371;372; SVE2-LABEL: eor3_4x16:373; SVE2:       // %bb.0:374; SVE2-NEXT:    // kill: def $d1 killed $d1 def $z1375; SVE2-NEXT:    // kill: def $d2 killed $d2 def $z2376; SVE2-NEXT:    // kill: def $d0 killed $d0 def $z0377; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d378; SVE2-NEXT:    fmov d0, d1379; SVE2-NEXT:    ret380;381; SHA3-SVE2-LABEL: eor3_4x16:382; SHA3-SVE2:       // %bb.0:383; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 def $q0384; SHA3-SVE2-NEXT:    // kill: def $d2 killed $d2 def $q2385; SHA3-SVE2-NEXT:    // kill: def $d1 killed $d1 def $q1386; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b387; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 killed $q0388; SHA3-SVE2-NEXT:    ret389  %4 = xor <4 x i16> %1, %2390  %5 = xor <4 x i16> %4, %0391  ret <4 x i16> %5392}393 394define <8 x i8> @eor3_8x8(<8 x i8> %0, <8 x i8> %1, <8 x i8> %2) {395; SHA3-LABEL: eor3_8x8:396; SHA3:       // %bb.0:397; SHA3-NEXT:    // kill: def $d0 killed $d0 def $q0398; SHA3-NEXT:    // kill: def $d2 killed $d2 def $q2399; SHA3-NEXT:    // kill: def $d1 killed $d1 def $q1400; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b401; SHA3-NEXT:    // kill: def $d0 killed $d0 killed $q0402; SHA3-NEXT:    ret403;404; NOSHA3-LABEL: eor3_8x8:405; NOSHA3:       // %bb.0:406; NOSHA3-NEXT:    eor v1.8b, v1.8b, v2.8b407; NOSHA3-NEXT:    eor v0.8b, v1.8b, v0.8b408; NOSHA3-NEXT:    ret409;410; SVE2-LABEL: eor3_8x8:411; SVE2:       // %bb.0:412; SVE2-NEXT:    // kill: def $d1 killed $d1 def $z1413; SVE2-NEXT:    // kill: def $d2 killed $d2 def $z2414; SVE2-NEXT:    // kill: def $d0 killed $d0 def $z0415; SVE2-NEXT:    eor3 z1.d, z1.d, z2.d, z0.d416; SVE2-NEXT:    fmov d0, d1417; SVE2-NEXT:    ret418;419; SHA3-SVE2-LABEL: eor3_8x8:420; SHA3-SVE2:       // %bb.0:421; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 def $q0422; SHA3-SVE2-NEXT:    // kill: def $d2 killed $d2 def $q2423; SHA3-SVE2-NEXT:    // kill: def $d1 killed $d1 def $q1424; SHA3-SVE2-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b425; SHA3-SVE2-NEXT:    // kill: def $d0 killed $d0 killed $q0426; SHA3-SVE2-NEXT:    ret427  %4 = xor <8 x i8> %1, %2428  %5 = xor <8 x i8> %4, %0429  ret <8 x i8> %5430}431