brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · 7692b1c Raw
218 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mattr=+complxnum,+neon -o - | FileCheck %s3 4target triple = "aarch64"5 6; a * b + c7define <4 x double> @mull_add(<4 x double> %a, <4 x double> %b, <4 x double> %c) {8; CHECK-LABEL: mull_add:9; CHECK:       // %bb.0: // %entry10; CHECK-NEXT:    fcmla v4.2d, v0.2d, v2.2d, #011; CHECK-NEXT:    fcmla v5.2d, v1.2d, v3.2d, #012; CHECK-NEXT:    fcmla v4.2d, v0.2d, v2.2d, #9013; CHECK-NEXT:    fcmla v5.2d, v1.2d, v3.2d, #9014; CHECK-NEXT:    mov v0.16b, v4.16b15; CHECK-NEXT:    mov v1.16b, v5.16b16; CHECK-NEXT:    ret17entry:18  %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>19  %strided.vec28 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 1, i32 3>20  %strided.vec30 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 2>21  %strided.vec31 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 1, i32 3>22  %0 = fmul fast <2 x double> %strided.vec31, %strided.vec23  %1 = fmul fast <2 x double> %strided.vec30, %strided.vec2824  %2 = fadd fast <2 x double> %0, %125  %3 = fmul fast <2 x double> %strided.vec30, %strided.vec26  %strided.vec33 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 0, i32 2>27  %strided.vec34 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 1, i32 3>28  %4 = fadd fast <2 x double> %strided.vec33, %329  %5 = fmul fast <2 x double> %strided.vec31, %strided.vec2830  %6 = fsub fast <2 x double> %4, %531  %7 = fadd fast <2 x double> %2, %strided.vec3432  %interleaved.vec = shufflevector <2 x double> %6, <2 x double> %7, <4 x i32> <i32 0, i32 2, i32 1, i32 3>33  ret <4 x double> %interleaved.vec34}35 36; a * b + c * d37define <4 x double> @mul_add_mull(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d) {38; CHECK-LABEL: mul_add_mull:39; CHECK:       // %bb.0: // %entry40; CHECK-NEXT:    movi v16.2d, #000000000000000041; CHECK-NEXT:    movi v17.2d, #000000000000000042; CHECK-NEXT:    fcmla v17.2d, v6.2d, v4.2d, #043; CHECK-NEXT:    fcmla v16.2d, v7.2d, v5.2d, #044; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #045; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #046; CHECK-NEXT:    fcmla v17.2d, v6.2d, v4.2d, #9047; CHECK-NEXT:    fcmla v16.2d, v7.2d, v5.2d, #9048; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #9049; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #9050; CHECK-NEXT:    mov v0.16b, v17.16b51; CHECK-NEXT:    mov v1.16b, v16.16b52; CHECK-NEXT:    ret53entry:54  %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>55  %strided.vec51 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 1, i32 3>56  %strided.vec53 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 2>57  %strided.vec54 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 1, i32 3>58  %0 = fmul fast <2 x double> %strided.vec54, %strided.vec59  %1 = fmul fast <2 x double> %strided.vec53, %strided.vec5160  %2 = fmul fast <2 x double> %strided.vec53, %strided.vec61  %3 = fmul fast <2 x double> %strided.vec54, %strided.vec5162  %strided.vec56 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 0, i32 2>63  %strided.vec57 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 1, i32 3>64  %strided.vec59 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 0, i32 2>65  %strided.vec60 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 1, i32 3>66  %4 = fmul fast <2 x double> %strided.vec60, %strided.vec5667  %5 = fmul fast <2 x double> %strided.vec59, %strided.vec5768  %6 = fmul fast <2 x double> %strided.vec59, %strided.vec5669  %7 = fmul fast <2 x double> %strided.vec60, %strided.vec5770  %8 = fadd fast <2 x double> %7, %371  %9 = fadd fast <2 x double> %6, %272  %10 = fsub fast <2 x double> %9, %873  %11 = fadd fast <2 x double> %0, %174  %12 = fadd fast <2 x double> %11, %575  %13 = fadd fast <2 x double> %12, %476  %interleaved.vec = shufflevector <2 x double> %10, <2 x double> %13, <4 x i32> <i32 0, i32 2, i32 1, i32 3>77  ret <4 x double> %interleaved.vec78}79 80; a * b - c * d81define <4 x double> @mul_sub_mull(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d) {82; CHECK-LABEL: mul_sub_mull:83; CHECK:       // %bb.0: // %entry84; CHECK-NEXT:    movi v16.2d, #000000000000000085; CHECK-NEXT:    movi v17.2d, #000000000000000086; CHECK-NEXT:    fcmla v17.2d, v6.2d, v4.2d, #27087; CHECK-NEXT:    fcmla v16.2d, v7.2d, v5.2d, #27088; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #089; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #090; CHECK-NEXT:    fcmla v17.2d, v6.2d, v4.2d, #18091; CHECK-NEXT:    fcmla v16.2d, v7.2d, v5.2d, #18092; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #9093; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #9094; CHECK-NEXT:    mov v0.16b, v17.16b95; CHECK-NEXT:    mov v1.16b, v16.16b96; CHECK-NEXT:    ret97entry:98  %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>99  %strided.vec53 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 1, i32 3>100  %strided.vec55 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 2>101  %strided.vec56 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 1, i32 3>102  %0 = fmul fast <2 x double> %strided.vec56, %strided.vec103  %1 = fmul fast <2 x double> %strided.vec55, %strided.vec53104  %2 = fmul fast <2 x double> %strided.vec55, %strided.vec105  %3 = fmul fast <2 x double> %strided.vec56, %strided.vec53106  %strided.vec58 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 0, i32 2>107  %strided.vec59 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 1, i32 3>108  %strided.vec61 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 0, i32 2>109  %strided.vec62 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 1, i32 3>110  %4 = fmul fast <2 x double> %strided.vec62, %strided.vec59111  %5 = fmul fast <2 x double> %strided.vec61, %strided.vec58112  %6 = fadd fast <2 x double> %5, %3113  %7 = fadd fast <2 x double> %4, %2114  %8 = fsub fast <2 x double> %7, %6115  %9 = fmul fast <2 x double> %strided.vec61, %strided.vec59116  %10 = fmul fast <2 x double> %strided.vec62, %strided.vec58117  %11 = fadd fast <2 x double> %10, %9118  %12 = fadd fast <2 x double> %0, %1119  %13 = fsub fast <2 x double> %12, %11120  %interleaved.vec = shufflevector <2 x double> %8, <2 x double> %13, <4 x i32> <i32 0, i32 2, i32 1, i32 3>121  ret <4 x double> %interleaved.vec122}123 124; a * b + conj(c) * d125define <4 x double> @mul_conj_mull(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d) {126; CHECK-LABEL: mul_conj_mull:127; CHECK:       // %bb.0: // %entry128; CHECK-NEXT:    movi v16.2d, #0000000000000000129; CHECK-NEXT:    movi v17.2d, #0000000000000000130; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #0131; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #0132; CHECK-NEXT:    fcmla v17.2d, v0.2d, v2.2d, #90133; CHECK-NEXT:    fcmla v16.2d, v1.2d, v3.2d, #90134; CHECK-NEXT:    fcmla v17.2d, v4.2d, v6.2d, #0135; CHECK-NEXT:    fcmla v16.2d, v5.2d, v7.2d, #0136; CHECK-NEXT:    fcmla v17.2d, v4.2d, v6.2d, #270137; CHECK-NEXT:    fcmla v16.2d, v5.2d, v7.2d, #270138; CHECK-NEXT:    mov v0.16b, v17.16b139; CHECK-NEXT:    mov v1.16b, v16.16b140; CHECK-NEXT:    ret141entry:142  %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>143  %strided.vec59 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 1, i32 3>144  %strided.vec61 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 2>145  %strided.vec62 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 1, i32 3>146  %0 = fmul fast <2 x double> %strided.vec62, %strided.vec147  %1 = fmul fast <2 x double> %strided.vec61, %strided.vec59148  %2 = fmul fast <2 x double> %strided.vec61, %strided.vec149  %strided.vec64 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 0, i32 2>150  %strided.vec65 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 1, i32 3>151  %strided.vec67 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 0, i32 2>152  %strided.vec68 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 1, i32 3>153  %3 = fmul fast <2 x double> %strided.vec68, %strided.vec64154  %4 = fmul fast <2 x double> %strided.vec67, %strided.vec64155  %5 = fmul fast <2 x double> %strided.vec68, %strided.vec65156  %6 = fmul fast <2 x double> %strided.vec62, %strided.vec59157  %7 = fsub fast <2 x double> %2, %6158  %8 = fadd fast <2 x double> %7, %4159  %9 = fadd fast <2 x double> %8, %5160  %10 = fadd fast <2 x double> %0, %1161  %11 = fmul fast <2 x double> %strided.vec67, %strided.vec65162  %12 = fsub fast <2 x double> %10, %11163  %13 = fadd fast <2 x double> %12, %3164  %interleaved.vec = shufflevector <2 x double> %9, <2 x double> %13, <4 x i32> <i32 0, i32 2, i32 1, i32 3>165  ret <4 x double> %interleaved.vec166}167 168; a + b + 1i * c * d169define <4 x double> @mul_add_rot_mull(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d) {170; CHECK-LABEL: mul_add_rot_mull:171; CHECK:       // %bb.0: // %entry172; CHECK-NEXT:    zip2 v16.2d, v2.2d, v3.2d173; CHECK-NEXT:    zip2 v17.2d, v0.2d, v1.2d174; CHECK-NEXT:    zip1 v2.2d, v2.2d, v3.2d175; CHECK-NEXT:    zip2 v18.2d, v4.2d, v5.2d176; CHECK-NEXT:    zip1 v19.2d, v6.2d, v7.2d177; CHECK-NEXT:    zip1 v0.2d, v0.2d, v1.2d178; CHECK-NEXT:    zip1 v1.2d, v4.2d, v5.2d179; CHECK-NEXT:    zip2 v5.2d, v6.2d, v7.2d180; CHECK-NEXT:    fmul v3.2d, v16.2d, v17.2d181; CHECK-NEXT:    fmul v4.2d, v2.2d, v17.2d182; CHECK-NEXT:    fmla v3.2d, v18.2d, v19.2d183; CHECK-NEXT:    fmla v4.2d, v0.2d, v16.2d184; CHECK-NEXT:    fmla v3.2d, v1.2d, v5.2d185; CHECK-NEXT:    fmla v4.2d, v1.2d, v19.2d186; CHECK-NEXT:    fneg v3.2d, v3.2d187; CHECK-NEXT:    fmls v4.2d, v18.2d, v5.2d188; CHECK-NEXT:    fmla v3.2d, v0.2d, v2.2d189; CHECK-NEXT:    zip1 v0.2d, v3.2d, v4.2d190; CHECK-NEXT:    zip2 v1.2d, v3.2d, v4.2d191; CHECK-NEXT:    ret192entry:193  %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>194  %strided.vec79 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 1, i32 3>195  %strided.vec81 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 2>196  %strided.vec82 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 1, i32 3>197  %0 = fmul fast <2 x double> %strided.vec82, %strided.vec198  %1 = fmul fast <2 x double> %strided.vec81, %strided.vec79199  %2 = fmul fast <2 x double> %strided.vec81, %strided.vec200  %3 = fmul fast <2 x double> %strided.vec82, %strided.vec79201  %strided.vec84 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 0, i32 2>202  %strided.vec85 = shufflevector <4 x double> %c, <4 x double> poison, <2 x i32> <i32 1, i32 3>203  %strided.vec87 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 0, i32 2>204  %strided.vec88 = shufflevector <4 x double> %d, <4 x double> poison, <2 x i32> <i32 1, i32 3>205  %4 = fmul fast <2 x double> %strided.vec87, %strided.vec84206  %5 = fmul fast <2 x double> %strided.vec87, %strided.vec85207  %6 = fmul fast <2 x double> %strided.vec88, %strided.vec84208  %7 = fadd fast <2 x double> %5, %3209  %8 = fadd fast <2 x double> %7, %6210  %9 = fsub fast <2 x double> %2, %8211  %10 = fadd fast <2 x double> %0, %1212  %11 = fadd fast <2 x double> %10, %4213  %12 = fmul fast <2 x double> %strided.vec88, %strided.vec85214  %13 = fsub fast <2 x double> %11, %12215  %interleaved.vec = shufflevector <2 x double> %9, <2 x double> %13, <4 x i32> <i32 0, i32 2, i32 1, i32 3>216  ret <4 x double> %interleaved.vec217}218