brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 1b33e0c Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define ptr @mul4(ptr %p, i64 %x) {5; CHECK-LABEL: define ptr @mul4(6; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    [[GEP_IDX:%.*]] = shl i64 [[X]], 49; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[GEP_IDX]]10; CHECK-NEXT:    ret ptr [[GEP]]11;12entry:13  %mul = mul i64 %x, 414  %gep = getelementptr inbounds i32, ptr %p, i64 %mul15  ret ptr %gep16}17 18define ptr @mul4_nuw(ptr %p, i64 %x) {19; CHECK-LABEL: define ptr @mul4_nuw(20; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {21; CHECK-NEXT:  entry:22; CHECK-NEXT:    [[GEP_IDX:%.*]] = shl i64 [[X]], 423; CHECK-NEXT:    [[GEP:%.*]] = getelementptr nuw i8, ptr [[P]], i64 [[GEP_IDX]]24; CHECK-NEXT:    ret ptr [[GEP]]25;26entry:27  %mul = mul i64 %x, 428  %gep = getelementptr nuw i32, ptr %p, i64 %mul29  ret ptr %gep30}31 32define ptr @mul5(ptr %p, i64 %x) {33; CHECK-LABEL: define ptr @mul5(34; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {35; CHECK-NEXT:  entry:36; CHECK-NEXT:    [[GEP_IDX:%.*]] = mul i64 [[X]], 2037; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[GEP_IDX]]38; CHECK-NEXT:    ret ptr [[GEP]]39;40entry:41  %mul = mul i64 %x, 542  %gep = getelementptr inbounds i32, ptr %p, i64 %mul43  ret ptr %gep44}45 46define ptr @noinbounds(ptr %p, i64 %x) {47; CHECK-LABEL: define ptr @noinbounds(48; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {49; CHECK-NEXT:  entry:50; CHECK-NEXT:    [[GEP_IDX:%.*]] = mul i64 [[X]], 2051; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[P]], i64 [[GEP_IDX]]52; CHECK-NEXT:    ret ptr [[GEP]]53;54entry:55  %mul = mul i64 %x, 556  %gep = getelementptr i32, ptr %p, i64 %mul57  ret ptr %gep58}59 60define ptr @usemul(ptr %p, i64 %x) {61; CHECK-LABEL: define ptr @usemul(62; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {63; CHECK-NEXT:  entry:64; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[X]], 565; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 [[MUL]]66; CHECK-NEXT:    call void @use(i64 [[MUL]])67; CHECK-NEXT:    ret ptr [[GEP]]68;69entry:70  %mul = mul i64 %x, 571  %gep = getelementptr inbounds i32, ptr %p, i64 %mul72  call void @use(i64 %mul)73  ret ptr %gep74}75 76define void @multiple(ptr %p, i64 %x) {77; CHECK-LABEL: define void @multiple(78; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {79; CHECK-NEXT:  entry:80; CHECK-NEXT:    [[MUL21:%.*]] = mul i64 [[X]], 2081; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[MUL21]]82; CHECK-NEXT:    [[MUL20:%.*]] = mul i64 [[X]], 2083; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[MUL20]]84; CHECK-NEXT:    call void @use2(ptr [[GEP3]], ptr [[GEP2]])85; CHECK-NEXT:    ret void86;87entry:88  %mul5 = mul i64 %x, 589  %gep1 = getelementptr inbounds i32, ptr %p, i64 %mul590  %mul20 = mul i64 %x, 2091  %gep2 = getelementptr inbounds i8, ptr %p, i64 %mul2092  call void @use2(ptr %gep1, ptr %gep2)93  ret void94}95 96define void @multiplestore(ptr %p, i64 %x) {97; CHECK-LABEL: define void @multiplestore(98; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {99; CHECK-NEXT:  entry:100; CHECK-NEXT:    [[MUL20:%.*]] = mul i64 [[X]], 20101; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[MUL20]]102; CHECK-NEXT:    [[MUL21:%.*]] = mul i64 [[X]], 20103; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[MUL21]]104; CHECK-NEXT:    store i32 0, ptr [[GEP2]], align 4105; CHECK-NEXT:    store i32 1, ptr [[GEP3]], align 4106; CHECK-NEXT:    ret void107;108entry:109  %mul5 = mul i64 %x, 5110  %gep1 = getelementptr inbounds i32, ptr %p, i64 %mul5111  %mul20 = mul i64 %x, 20112  %gep2 = getelementptr inbounds i8, ptr %p, i64 %mul20113  store i32 0, ptr %gep1114  store i32 1, ptr %gep2115  ret void116}117 118declare void @use(i64)119declare void @use2(ptr, ptr)120