93 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4declare ptr @g()5declare ptr @use(ptr)6 7define void @call1() {8; CHECK-LABEL: define void @call1() {9; CHECK-NEXT: [[A:%.*]] = call ptr @g()10; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 411; CHECK-NEXT: call void @use(ptr [[B]])12; CHECK-NEXT: ret void13;14 %a = call ptr @g()15 %b = getelementptr i8, ptr %a, i64 416 call void @use(ptr %b)17 ret void18}19define void @call2() {20; CHECK-LABEL: define void @call2() {21; CHECK-NEXT: [[A:%.*]] = call dereferenceable(8) ptr @g()22; CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i64 423; CHECK-NEXT: call void @use(ptr nonnull [[B]])24; CHECK-NEXT: ret void25;26 %a = call dereferenceable(8) ptr @g()27 %b = getelementptr i8, ptr %a, i64 428 call void @use(ptr %b)29 ret void30}31 32define void @call3() {33; CHECK-LABEL: define void @call3() {34; CHECK-NEXT: [[A:%.*]] = call dereferenceable_or_null(8) ptr @g()35; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 436; CHECK-NEXT: call void @use(ptr [[B]])37; CHECK-NEXT: ret void38;39 %a = call dereferenceable_or_null(8) ptr @g()40 %b = getelementptr i8, ptr %a, i64 441 call void @use(ptr %b)42 ret void43}44 45define void @alloca() {46; CHECK-LABEL: define void @alloca() {47; CHECK-NEXT: [[A:%.*]] = alloca i64, align 848; CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i64 449; CHECK-NEXT: call void @use(ptr nonnull [[B]])50; CHECK-NEXT: ret void51;52 %a = alloca i6453 %b = getelementptr i8, ptr %a, i64 454 call void @use(ptr %b)55 ret void56}57 58define void @arg1(ptr %a) {59; CHECK-LABEL: define void @arg160; CHECK-SAME: (ptr [[A:%.*]]) {61; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 462; CHECK-NEXT: call void @use(ptr [[B]])63; CHECK-NEXT: ret void64;65 %b = getelementptr i8, ptr %a, i64 466 call void @use(ptr %b)67 ret void68}69 70define void @arg2(ptr dereferenceable(8) %a) {71; CHECK-LABEL: define void @arg272; CHECK-SAME: (ptr dereferenceable(8) [[A:%.*]]) {73; CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i64 474; CHECK-NEXT: call void @use(ptr nonnull [[B]])75; CHECK-NEXT: ret void76;77 %b = getelementptr i8, ptr %a, i64 478 call void @use(ptr %b)79 ret void80}81 82define void @arg3(ptr dereferenceable_or_null(8) %a) {83; CHECK-LABEL: define void @arg384; CHECK-SAME: (ptr dereferenceable_or_null(8) [[A:%.*]]) {85; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 486; CHECK-NEXT: call void @use(ptr [[B]])87; CHECK-NEXT: ret void88;89 %b = getelementptr i8, ptr %a, i64 490 call void @use(ptr %b)91 ret void92}93