brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · e60a3e4 Raw
233 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3 4define ptr @scalar_of_scalable_1(ptr %base) {5; CHECK-LABEL: scalar_of_scalable_1:6; CHECK:       // %bb.0:7; CHECK-NEXT:    rdvl x8, #48; CHECK-NEXT:    add x0, x0, x89; CHECK-NEXT:    ret10  %d = getelementptr <vscale x 2 x i64>, ptr %base, i64 411  ret ptr %d12}13 14define ptr @scalar_of_scalable_2(ptr %base, i64 %offset) {15; CHECK-LABEL: scalar_of_scalable_2:16; CHECK:       // %bb.0:17; CHECK-NEXT:    rdvl x8, #118; CHECK-NEXT:    madd x0, x1, x8, x019; CHECK-NEXT:    ret20  %d = getelementptr <vscale x 2 x i64>, ptr %base, i64 %offset21  ret ptr %d22}23 24define ptr @scalar_of_scalable_3(ptr %base, i64 %offset) {25; CHECK-LABEL: scalar_of_scalable_3:26; CHECK:       // %bb.0:27; CHECK-NEXT:    cnth x828; CHECK-NEXT:    madd x0, x1, x8, x029; CHECK-NEXT:    ret30  %d = getelementptr <vscale x 2 x i32>, ptr %base, i64 %offset31  ret ptr %d32}33 34define <2 x ptr> @fixed_of_scalable_1(ptr %base) {35; CHECK-LABEL: fixed_of_scalable_1:36; CHECK:       // %bb.0:37; CHECK-NEXT:    rdvl x8, #138; CHECK-NEXT:    dup v1.2d, x039; CHECK-NEXT:    dup v0.2d, x840; CHECK-NEXT:    add v0.2d, v1.2d, v0.2d41; CHECK-NEXT:    ret42  %d = getelementptr <vscale x 2 x i64>, ptr %base, <2 x i64> <i64 1, i64 1>43  ret <2 x ptr> %d44}45 46define <2 x ptr> @fixed_of_scalable_2(<2 x ptr> %base) {47; CHECK-LABEL: fixed_of_scalable_2:48; CHECK:       // %bb.0:49; CHECK-NEXT:    rdvl x8, #150; CHECK-NEXT:    dup v1.2d, x851; CHECK-NEXT:    add v0.2d, v0.2d, v1.2d52; CHECK-NEXT:    ret53  %d = getelementptr <vscale x 2 x i64>, <2 x ptr> %base, <2 x i64> <i64 1, i64 1>54  ret <2 x ptr> %d55}56 57define <vscale x 2 x ptr> @scalable_of_fixed_1(ptr %base) {58; CHECK-LABEL: scalable_of_fixed_1:59; CHECK:       // %bb.0:60; CHECK-NEXT:    add x8, x0, #161; CHECK-NEXT:    mov z0.d, x862; CHECK-NEXT:    ret63  %d = getelementptr i8, ptr %base, <vscale x 2 x i64> splat (i64 1)64  ret <vscale x 2 x ptr> %d65}66 67define <vscale x 2 x ptr> @scalable_of_fixed_2(<vscale x 2 x ptr> %base) {68; CHECK-LABEL: scalable_of_fixed_2:69; CHECK:       // %bb.0:70; CHECK-NEXT:    add z0.d, z0.d, #1 // =0x171; CHECK-NEXT:    ret72  %d = getelementptr i8, <vscale x 2 x ptr> %base, <vscale x 2 x i64> splat (i64 1)73  ret <vscale x 2 x ptr> %d74}75 76define <vscale x 2 x ptr> @scalable_of_fixed_3_i8(ptr %base, <vscale x 2 x i64> %idx) {77; CHECK-LABEL: scalable_of_fixed_3_i8:78; CHECK:       // %bb.0:79; CHECK-NEXT:    mov z1.d, x080; CHECK-NEXT:    add z0.d, z1.d, z0.d81; CHECK-NEXT:    ret82  %d = getelementptr i8, ptr %base, <vscale x 2 x i64> %idx83  ret <vscale x 2 x ptr> %d84}85 86define <vscale x 2 x ptr> @scalable_of_fixed_3_i16(ptr %base, <vscale x 2 x i64> %idx) {87; CHECK-LABEL: scalable_of_fixed_3_i16:88; CHECK:       // %bb.0:89; CHECK-NEXT:    mov z1.d, x090; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, lsl #1]91; CHECK-NEXT:    ret92  %d = getelementptr i16, ptr %base, <vscale x 2 x i64> %idx93  ret <vscale x 2 x ptr> %d94}95 96define <vscale x 2 x ptr> @scalable_of_fixed_3_i32(ptr %base, <vscale x 2 x i64> %idx) {97; CHECK-LABEL: scalable_of_fixed_3_i32:98; CHECK:       // %bb.0:99; CHECK-NEXT:    mov z1.d, x0100; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, lsl #2]101; CHECK-NEXT:    ret102  %d = getelementptr i32, ptr %base, <vscale x 2 x i64> %idx103  ret <vscale x 2 x ptr> %d104}105 106define <vscale x 2 x ptr> @scalable_of_fixed_3_i64(ptr %base, <vscale x 2 x i64> %idx) {107; CHECK-LABEL: scalable_of_fixed_3_i64:108; CHECK:       // %bb.0:109; CHECK-NEXT:    mov z1.d, x0110; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, lsl #3]111; CHECK-NEXT:    ret112  %d = getelementptr i64, ptr %base, <vscale x 2 x i64> %idx113  ret <vscale x 2 x ptr> %d114}115 116define <vscale x 2 x ptr> @scalable_of_fixed_4_i8(ptr %base, <vscale x 2 x i32> %idx) {117; CHECK-LABEL: scalable_of_fixed_4_i8:118; CHECK:       // %bb.0:119; CHECK-NEXT:    mov z1.d, x0120; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, sxtw]121; CHECK-NEXT:    ret122  %d = getelementptr i8, ptr %base, <vscale x 2 x i32> %idx123  ret <vscale x 2 x ptr> %d124}125 126define <vscale x 2 x ptr> @scalable_of_fixed_4_i16(ptr %base, <vscale x 2 x i32> %idx) {127; CHECK-LABEL: scalable_of_fixed_4_i16:128; CHECK:       // %bb.0:129; CHECK-NEXT:    mov z1.d, x0130; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, sxtw #1]131; CHECK-NEXT:    ret132  %d = getelementptr i16, ptr %base, <vscale x 2 x i32> %idx133  ret <vscale x 2 x ptr> %d134}135 136define <vscale x 2 x ptr> @scalable_of_fixed_4_i32(ptr %base, <vscale x 2 x i32> %idx) {137; CHECK-LABEL: scalable_of_fixed_4_i32:138; CHECK:       // %bb.0:139; CHECK-NEXT:    mov z1.d, x0140; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, sxtw #2]141; CHECK-NEXT:    ret142  %d = getelementptr i32, ptr %base, <vscale x 2 x i32> %idx143  ret <vscale x 2 x ptr> %d144}145 146define <vscale x 2 x ptr> @scalable_of_fixed_4_i64(ptr %base, <vscale x 2 x i32> %idx) {147; CHECK-LABEL: scalable_of_fixed_4_i64:148; CHECK:       // %bb.0:149; CHECK-NEXT:    mov z1.d, x0150; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, sxtw #3]151; CHECK-NEXT:    ret152  %d = getelementptr i64, ptr %base, <vscale x 2 x i32> %idx153  ret <vscale x 2 x ptr> %d154}155 156define <vscale x 2 x ptr> @scalable_of_fixed_5(ptr %base, <vscale x 2 x i32> %idx) {157; CHECK-LABEL: scalable_of_fixed_5:158; CHECK:       // %bb.0:159; CHECK-NEXT:    mov z1.d, x0160; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, uxtw]161; CHECK-NEXT:    ret162  %idxZext = zext <vscale x 2 x i32> %idx to <vscale x 2 x i64>163  %d = getelementptr i8, ptr %base, <vscale x 2 x i64> %idxZext164  ret <vscale x 2 x ptr> %d165}166 167define <vscale x 2 x ptr> @scalable_of_fixed_5_i16(ptr %base, <vscale x 2 x i32> %idx) {168; CHECK-LABEL: scalable_of_fixed_5_i16:169; CHECK:       // %bb.0:170; CHECK-NEXT:    mov z1.d, x0171; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, uxtw #1]172; CHECK-NEXT:    ret173  %idxZext = zext <vscale x 2 x i32> %idx to <vscale x 2 x i64>174  %d = getelementptr i16, ptr %base, <vscale x 2 x i64> %idxZext175  ret <vscale x 2 x ptr> %d176}177 178define <vscale x 2 x ptr> @scalable_of_fixed_5_i32(ptr %base, <vscale x 2 x i32> %idx) {179; CHECK-LABEL: scalable_of_fixed_5_i32:180; CHECK:       // %bb.0:181; CHECK-NEXT:    mov z1.d, x0182; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, uxtw #2]183; CHECK-NEXT:    ret184  %idxZext = zext <vscale x 2 x i32> %idx to <vscale x 2 x i64>185  %d = getelementptr i32, ptr %base, <vscale x 2 x i64> %idxZext186  ret <vscale x 2 x ptr> %d187}188 189 190define <vscale x 2 x ptr> @scalable_of_fixed_5_i64(ptr %base, <vscale x 2 x i32> %idx) {191; CHECK-LABEL: scalable_of_fixed_5_i64:192; CHECK:       // %bb.0:193; CHECK-NEXT:    mov z1.d, x0194; CHECK-NEXT:    adr z0.d, [z1.d, z0.d, uxtw #3]195; CHECK-NEXT:    ret196  %idxZext = zext <vscale x 2 x i32> %idx to <vscale x 2 x i64>197  %d = getelementptr i64, ptr %base, <vscale x 2 x i64> %idxZext198  ret <vscale x 2 x ptr> %d199}200 201define <vscale x 2 x ptr> @scalable_of_scalable_1(ptr %base) {202; CHECK-LABEL: scalable_of_scalable_1:203; CHECK:       // %bb.0:204; CHECK-NEXT:    rdvl x8, #1205; CHECK-NEXT:    add x8, x0, x8206; CHECK-NEXT:    mov z0.d, x8207; CHECK-NEXT:    ret208  %d = getelementptr <vscale x 2 x i64>, ptr %base, <vscale x 2 x i64> splat (i64 1)209  ret <vscale x 2 x ptr> %d210}211 212define <vscale x 2 x ptr> @scalable_of_scalable_2(<vscale x 2 x ptr> %base) {213; CHECK-LABEL: scalable_of_scalable_2:214; CHECK:       // %bb.0:215; CHECK-NEXT:    incd z0.d, all, mul #8216; CHECK-NEXT:    ret217  %d = getelementptr <vscale x 2 x i64>, <vscale x 2 x ptr> %base, <vscale x 2 x i64> splat (i64 1)218  ret <vscale x 2 x ptr> %d219}220 221define <vscale x 2 x ptr> @scalable_of_scalable_3(<vscale x 2 x ptr> %base, <vscale x 2 x i32> %idx) {222; CHECK-LABEL: scalable_of_scalable_3:223; CHECK:       // %bb.0:224; CHECK-NEXT:    ptrue p0.d225; CHECK-NEXT:    rdvl x8, #1226; CHECK-NEXT:    mov z2.d, x8227; CHECK-NEXT:    sxtw z1.d, p0/m, z1.d228; CHECK-NEXT:    mla z0.d, p0/m, z1.d, z2.d229; CHECK-NEXT:    ret230  %d = getelementptr <vscale x 2 x i64>, <vscale x 2 x ptr> %base, <vscale x 2 x i32> %idx231  ret <vscale x 2 x ptr> %d232}233