brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 5b2d660 Raw
169 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -O0 -global-isel -stop-after=irtranslator -o - %s | FileCheck %s3 4%type = type [4 x {i8, i32}]5 6define ptr @translate_element_size1(i64 %arg) {7  ; CHECK-LABEL: name: translate_element_size18  ; CHECK: bb.1 (%ir-block.0):9  ; CHECK-NEXT:   liveins: $x010  ; CHECK-NEXT: {{  $}}11  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x012  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(p0) = G_CONSTANT i64 013  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[C]], [[COPY]](s64)14  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)15  ; CHECK-NEXT:   $x0 = COPY [[COPY1]](p0)16  ; CHECK-NEXT:   RET_ReallyLR implicit $x017  %tmp = getelementptr i8, ptr null, i64 %arg18  ret ptr %tmp19}20 21define ptr @first_offset_const(ptr %addr) {22 23  ; CHECK-LABEL: name: first_offset_const24  ; CHECK: bb.1 (%ir-block.0):25  ; CHECK-NEXT:   liveins: $x026  ; CHECK-NEXT: {{  $}}27  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x028  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3229  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)30  ; CHECK-NEXT:   $x0 = COPY [[PTR_ADD]](p0)31  ; CHECK-NEXT:   RET_ReallyLR implicit $x032  %res = getelementptr %type, ptr %addr, i32 133  ret ptr %res34}35 36define ptr @first_offset_trivial(ptr %addr) {37 38  ; CHECK-LABEL: name: first_offset_trivial39  ; CHECK: bb.1 (%ir-block.0):40  ; CHECK-NEXT:   liveins: $x041  ; CHECK-NEXT: {{  $}}42  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x043  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY [[COPY]](p0)44  ; CHECK-NEXT:   $x0 = COPY [[COPY1]](p0)45  ; CHECK-NEXT:   RET_ReallyLR implicit $x046  %res = getelementptr %type, ptr %addr, i32 047  ret ptr %res48}49 50define ptr @first_offset_variable(ptr %addr, i64 %idx) {51 52  ; CHECK-LABEL: name: first_offset_variable53  ; CHECK: bb.1 (%ir-block.0):54  ; CHECK-NEXT:   liveins: $x0, $x155  ; CHECK-NEXT: {{  $}}56  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x057  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x158  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3259  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY1]], [[C]]60  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)61  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)62  ; CHECK-NEXT:   $x0 = COPY [[COPY2]](p0)63  ; CHECK-NEXT:   RET_ReallyLR implicit $x064  %res = getelementptr %type, ptr %addr, i64 %idx65  ret ptr %res66}67 68define ptr @first_offset_ext(ptr %addr, i32 %idx) {69 70  ; CHECK-LABEL: name: first_offset_ext71  ; CHECK: bb.1 (%ir-block.0):72  ; CHECK-NEXT:   liveins: $w1, $x073  ; CHECK-NEXT: {{  $}}74  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x075  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w176  ; CHECK-NEXT:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)77  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3278  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT]], [[C]]79  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)80  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)81  ; CHECK-NEXT:   $x0 = COPY [[COPY2]](p0)82  ; CHECK-NEXT:   RET_ReallyLR implicit $x083  %res = getelementptr %type, ptr %addr, i32 %idx84  ret ptr %res85}86 87%type1 = type [4 x [4 x i32]]88define ptr @const_then_var(ptr %addr, i64 %idx) {89 90  ; CHECK-LABEL: name: const_then_var91  ; CHECK: bb.1 (%ir-block.0):92  ; CHECK-NEXT:   liveins: $x0, $x193  ; CHECK-NEXT: {{  $}}94  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x095  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x196  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 27297  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)98  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 499  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY1]], [[C1]]100  ; CHECK-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[MUL]](s64)101  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD1]](p0)102  ; CHECK-NEXT:   $x0 = COPY [[COPY2]](p0)103  ; CHECK-NEXT:   RET_ReallyLR implicit $x0104  %res = getelementptr %type1, ptr %addr, i32 4, i32 1, i64 %idx105  ret ptr %res106}107 108define ptr @var_then_const(ptr %addr, i64 %idx) {109 110  ; CHECK-LABEL: name: var_then_const111  ; CHECK: bb.1 (%ir-block.0):112  ; CHECK-NEXT:   liveins: $x0, $x1113  ; CHECK-NEXT: {{  $}}114  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0115  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1116  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64117  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY1]], [[C]]118  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[MUL]](s64)119  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 40120  ; CHECK-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C1]](s64)121  ; CHECK-NEXT:   $x0 = COPY [[PTR_ADD1]](p0)122  ; CHECK-NEXT:   RET_ReallyLR implicit $x0123  %res = getelementptr %type1, ptr %addr, i64 %idx, i32 2, i32 2124  ret ptr %res125}126 127@arr = external global [8 x i32]128 129define <2 x ptr> @vec_gep_scalar_base(<2 x i64> %offs) {130  ; CHECK-LABEL: name: vec_gep_scalar_base131  ; CHECK: bb.1.entry:132  ; CHECK-NEXT:   liveins: $q0133  ; CHECK-NEXT: {{  $}}134  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0135  ; CHECK-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @arr136  ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[GV]](p0), [[GV]](p0)137  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4138  ; CHECK-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)139  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:_(<2 x s64>) = nsw G_MUL [[COPY]], [[BUILD_VECTOR1]]140  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(<2 x p0>) = nusw inbounds G_PTR_ADD [[BUILD_VECTOR]], [[MUL]](<2 x s64>)141  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(<2 x p0>) = COPY [[PTR_ADD]](<2 x p0>)142  ; CHECK-NEXT:   $q0 = COPY [[COPY1]](<2 x p0>)143  ; CHECK-NEXT:   RET_ReallyLR implicit $q0144entry:145  %0 = getelementptr inbounds [8 x i32], ptr @arr, i64 0, <2 x i64> %offs146  ret <2 x ptr> %0147}148 149define <4 x ptr> @vector_gep_v4i32(<4 x ptr> %b, <4 x i32> %off) {150  ; CHECK-LABEL: name: vector_gep_v4i32151  ; CHECK: bb.1.entry:152  ; CHECK-NEXT:   liveins: $q0, $q1, $q2153  ; CHECK-NEXT: {{  $}}154  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0155  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1156  ; CHECK-NEXT:   [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p0>) = G_CONCAT_VECTORS [[COPY]](<2 x s64>), [[COPY1]](<2 x s64>)157  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $q2158  ; CHECK-NEXT:   [[SEXT:%[0-9]+]]:_(<4 x s64>) = G_SEXT [[COPY2]](<4 x s32>)159  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(<4 x p0>) = G_PTR_ADD [[CONCAT_VECTORS]], [[SEXT]](<4 x s64>)160  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(<4 x p0>) = COPY [[PTR_ADD]](<4 x p0>)161  ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[COPY3]](<4 x p0>)162  ; CHECK-NEXT:   $q0 = COPY [[UV]](<2 x s64>)163  ; CHECK-NEXT:   $q1 = COPY [[UV1]](<2 x s64>)164  ; CHECK-NEXT:   RET_ReallyLR implicit $q0, implicit $q1165entry:166  %g = getelementptr i8, <4 x ptr> %b, <4 x i32> %off167  ret <4 x ptr> %g168}169