diff --git a/llvm/test/CodeGen/AArch64/sve-gep.ll b/llvm/test/CodeGen/AArch64/sve-gep.ll index bfa4f90d35ab93..0fee23bfac4cb4 100644 --- a/llvm/test/CodeGen/AArch64/sve-gep.ll +++ b/llvm/test/CodeGen/AArch64/sve-gep.ll @@ -74,8 +74,8 @@ define @scalable_of_fixed_2( %base) { ret %d } -define @scalable_of_fixed_3(i8* %base, %idx) { -; CHECK-LABEL: scalable_of_fixed_3: +define @scalable_of_fixed_3_i8(i8* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_3_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z1.d, x0 ; CHECK-NEXT: add z0.d, z1.d, z0.d @@ -84,8 +84,41 @@ define @scalable_of_fixed_3(i8* %base, %id ret %d } -define @scalable_of_fixed_4(i8* %base, %idx) { -; CHECK-LABEL: scalable_of_fixed_4: +define @scalable_of_fixed_3_i16(i16* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_3_i16: +; CHECK: // %bb.0: +; CHECK-NEXT: lsl z0.d, z0.d, #1 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i16, i16* %base, %idx + ret %d +} + +define @scalable_of_fixed_3_i32(i32* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_3_i32: +; CHECK: // %bb.0: +; CHECK-NEXT: lsl z0.d, z0.d, #2 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i32, i32* %base, %idx + ret %d +} + +define @scalable_of_fixed_3_i64(i64* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_3_i64: +; CHECK: // %bb.0: +; CHECK-NEXT: lsl z0.d, z0.d, #3 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i64, i64* %base, %idx + ret %d +} + +define @scalable_of_fixed_4_i8(i8* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_4_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: sxtw z0.d, p0/m, z0.d @@ -96,6 +129,97 @@ define @scalable_of_fixed_4(i8* %base, %id ret %d } +define @scalable_of_fixed_4_i16(i16* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_4_i16: +; CHECK: // %bb.0: +; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: sxtw z0.d, p0/m, z0.d +; CHECK-NEXT: lsl z0.d, z0.d, #1 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i16, i16* %base, %idx + ret %d +} + +define @scalable_of_fixed_4_i32(i32* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_4_i32: +; CHECK: // %bb.0: +; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: sxtw z0.d, p0/m, z0.d +; CHECK-NEXT: lsl z0.d, z0.d, #2 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i32, i32* %base, %idx + ret %d +} + +define @scalable_of_fixed_4_i64(i64* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_4_i64: +; CHECK: // %bb.0: +; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: sxtw z0.d, p0/m, z0.d +; CHECK-NEXT: lsl z0.d, z0.d, #3 +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %d = getelementptr i64, i64* %base, %idx + ret %d +} + +define @scalable_of_fixed_5(i8* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_5: +; CHECK: // %bb.0: +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: and z0.d, z0.d, #0xffffffff +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %idxZext = zext %idx to + %d = getelementptr i8, i8* %base, %idxZext + ret %d +} + +define @scalable_of_fixed_5_i16(i16* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_5_i16: +; CHECK: // %bb.0: +; CHECK-NEXT: and z0.d, z0.d, #0xffffffff +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: lsl z0.d, z0.d, #1 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %idxZext = zext %idx to + %d = getelementptr i16, i16* %base, %idxZext + ret %d +} + +define @scalable_of_fixed_5_i32(i32* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_5_i32: +; CHECK: // %bb.0: +; CHECK-NEXT: and z0.d, z0.d, #0xffffffff +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: lsl z0.d, z0.d, #2 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %idxZext = zext %idx to + %d = getelementptr i32, i32* %base, %idxZext + ret %d +} + + +define @scalable_of_fixed_5_i64(i64* %base, %idx) { +; CHECK-LABEL: scalable_of_fixed_5_i64: +; CHECK: // %bb.0: +; CHECK-NEXT: and z0.d, z0.d, #0xffffffff +; CHECK-NEXT: mov z1.d, x0 +; CHECK-NEXT: lsl z0.d, z0.d, #3 +; CHECK-NEXT: add z0.d, z1.d, z0.d +; CHECK-NEXT: ret + %idxZext = zext %idx to + %d = getelementptr i64, i64* %base, %idxZext + ret %d +} + define *> @scalable_of_scalable_1(* %base) { ; CHECK-LABEL: scalable_of_scalable_1: ; CHECK: // %bb.0: