66 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -global-isel -mtriple aarch64 -stop-after=irtranslator -verify-machineinstrs %s -o - -use-constant-int-for-fixed-length-splat=false | FileCheck %s --check-prefix=CHECK3; RUN: llc -O0 -global-isel -mtriple aarch64 -stop-after=irtranslator -verify-machineinstrs %s -o - -use-constant-int-for-fixed-length-splat | FileCheck %s --check-prefix=CHECK-CI4 5; Make sure we treat <1 x N> getelementptrs like scalar getelementptrs.6 7; We should not create a splat vector for the non-vector index on this8; getelementptr. The entire getelementptr should be translated to a scalar9; G_PTR_ADD.10define <1 x ptr> @one_elt_vector_ptr_add_non_vector_idx(<1 x ptr> %vec) {11 ; CHECK-LABEL: name: one_elt_vector_ptr_add_non_vector_idx12 ; CHECK: bb.1 (%ir-block.0):13 ; CHECK-NEXT: liveins: $d014 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $d016 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 117 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)18 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)19 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[SEXT]](s64)20 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)21 ; CHECK-NEXT: $d0 = COPY [[COPY2]](p0)22 ; CHECK-NEXT: RET_ReallyLR implicit $d023 ;24 ; CHECK-CI-LABEL: name: one_elt_vector_ptr_add_non_vector_idx25 ; CHECK-CI: bb.1 (%ir-block.0):26 ; CHECK-CI-NEXT: liveins: $d027 ; CHECK-CI-NEXT: {{ $}}28 ; CHECK-CI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $d029 ; CHECK-CI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 130 ; CHECK-CI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)31 ; CHECK-CI-NEXT: $d0 = COPY [[PTR_ADD]](p0)32 ; CHECK-CI-NEXT: RET_ReallyLR implicit $d033 %ptr_add = getelementptr i8, <1 x ptr> %vec, <1 x i32> <i32 1>34 ret <1 x ptr> %ptr_add35}36 37; We should not create a splat vector for the non-vector pointer on this38; getelementptr. The entire getelementptr should be translated to a scalar39; G_PTR_ADD.40define <1 x ptr> @one_elt_vector_ptr_add_non_vector_ptr(ptr %vec) {41 ; CHECK-LABEL: name: one_elt_vector_ptr_add_non_vector_ptr42 ; CHECK: bb.1 (%ir-block.0):43 ; CHECK-NEXT: liveins: $x044 ; CHECK-NEXT: {{ $}}45 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x046 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 147 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)48 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)49 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[SEXT]](s64)50 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)51 ; CHECK-NEXT: $d0 = COPY [[COPY2]](p0)52 ; CHECK-NEXT: RET_ReallyLR implicit $d053 ;54 ; CHECK-CI-LABEL: name: one_elt_vector_ptr_add_non_vector_ptr55 ; CHECK-CI: bb.1 (%ir-block.0):56 ; CHECK-CI-NEXT: liveins: $x057 ; CHECK-CI-NEXT: {{ $}}58 ; CHECK-CI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x059 ; CHECK-CI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 160 ; CHECK-CI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)61 ; CHECK-CI-NEXT: $d0 = COPY [[PTR_ADD]](p0)62 ; CHECK-CI-NEXT: RET_ReallyLR implicit $d063 %ptr_add = getelementptr i8, ptr %vec, <1 x i32> <i32 1>64 ret <1 x ptr> %ptr_add65}66