98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -stop-after=irtranslator -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=O03; RUN: llc -O3 -stop-after=irtranslator -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=O34target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"5target triple = "aarch64--"6 7define i32 @cse_gep(ptr %ptr, i32 %idx) {8 ; O0-LABEL: name: cse_gep9 ; O0: bb.1 (%ir-block.0):10 ; O0-NEXT: liveins: $w1, $x011 ; O0-NEXT: {{ $}}12 ; O0-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x013 ; O0-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w114 ; O0-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)15 ; O0-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1616 ; O0-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]17 ; O0-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)18 ; O0-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)19 ; O0-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)20 ; O0-NEXT: [[MUL1:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]21 ; O0-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL1]](s64)22 ; O0-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 423 ; O0-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD1]], [[C1]](s64)24 ; O0-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.gep2)25 ; O0-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]26 ; O0-NEXT: $w0 = COPY [[ADD]](s32)27 ; O0-NEXT: RET_ReallyLR implicit $w028 ;29 ; O3-LABEL: name: cse_gep30 ; O3: bb.1 (%ir-block.0):31 ; O3-NEXT: liveins: $w1, $x032 ; O3-NEXT: {{ $}}33 ; O3-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x034 ; O3-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w135 ; O3-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY1]](s32)36 ; O3-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1637 ; O3-NEXT: [[MUL:%[0-9]+]]:_(s64) = nsw G_MUL [[SEXT]], [[C]]38 ; O3-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nusw inbounds G_PTR_ADD [[COPY]], [[MUL]](s64)39 ; O3-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)40 ; O3-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.gep1)41 ; O3-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 442 ; O3-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[C1]](s64)43 ; O3-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32) from %ir.gep2)44 ; O3-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[LOAD1]]45 ; O3-NEXT: $w0 = COPY [[ADD]](s32)46 ; O3-NEXT: RET_ReallyLR implicit $w047 %sidx = sext i32 %idx to i6448 %gep1 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 049 %v1 = load i32, ptr %gep150 %gep2 = getelementptr inbounds [4 x i32], ptr %ptr, i64 %sidx, i64 151 %v2 = load i32, ptr %gep252 %res = add i32 %v1, %v253 ret i32 %res54}55 56; OSS Fuzz https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6505257define void @ossfuzz65052() {58 ; O0-LABEL: name: ossfuzz6505259 ; O0: bb.1 (%ir-block.0):60 ; O0-NEXT: successors: %bb.2(0x80000000)61 ; O0-NEXT: {{ $}}62 ; O0-NEXT: [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF63 ; O0-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -17014118346046923173168730371588410572864 ; O0-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[C]](s128)65 ; O0-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1666 ; O0-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[TRUNC]], [[C1]]67 ; O0-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[MUL]](s64)68 ; O0-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)69 ; O0-NEXT: G_BR %bb.270 ; O0-NEXT: {{ $}}71 ; O0-NEXT: bb.2.BB:72 ; O0-NEXT: successors: %bb.2(0x80000000)73 ; O0-NEXT: {{ $}}74 ; O0-NEXT: G_BR %bb.275 ;76 ; O3-LABEL: name: ossfuzz6505277 ; O3: bb.1 (%ir-block.0):78 ; O3-NEXT: successors: %bb.2(0x80000000)79 ; O3-NEXT: {{ $}}80 ; O3-NEXT: [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF81 ; O3-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -17014118346046923173168730371588410572882 ; O3-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[C]](s128)83 ; O3-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1684 ; O3-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[TRUNC]], [[C1]]85 ; O3-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[MUL]](s64)86 ; O3-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)87 ; O3-NEXT: {{ $}}88 ; O3-NEXT: bb.2.BB:89 ; O3-NEXT: successors: %bb.2(0x80000000)90 ; O3-NEXT: {{ $}}91 ; O3-NEXT: G_BR %bb.292 %G15 = getelementptr i128, ptr poison, i128 -17014118346046923173168730371588410572893 br label %BB94 95BB: ; preds = %BB, %096 br label %BB97}98