brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · d1d3532 Raw
96 lines · plain
1; RUN: opt -passes=inline %s -S | FileCheck %s2 3target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"4target triple = "thumbv7m-arm-none-eabi"5 6; CHECK-LABEL: void @doCalls7define void @doCalls(ptr nocapture %p1, ptr nocapture %p2, i32 %n) #0 {8entry:9  %div = lshr i32 %n, 110; CHECK: call void @LoopCall11  tail call void @LoopCall(ptr %p1, ptr %p2, i32 %div) #012 13  %div2 = lshr i32 %n, 214; CHECK: call void @LoopCall15  tail call void @LoopCall(ptr %p1, ptr %p2, i32 %div2) #016 17; CHECK-NOT: call void @LoopCall18  tail call void @LoopCall(ptr %p2, ptr %p1, i32 0) #019 20; CHECK-NOT: call void @LoopCall_internal21  tail call void @LoopCall_internal(ptr %p1, ptr %p2, i32 %div2) #022 23  %div3 = lshr i32 %n, 424; CHECK-NOT: call void @SimpleCall25  tail call void @SimpleCall(ptr %p2, ptr %p1, i32 %div3) #026  ret void27}28 29; CHECK-LABEL: define void @LoopCall30define void @LoopCall(ptr nocapture %dest, ptr nocapture readonly %source, i32 %num) #0 {31entry:32  %c = icmp ne i32 %num, 033  br i1 %c, label %while.cond, label %while.end34 35while.cond:                                       ; preds = %while.body, %entry36  %num.addr.0 = phi i32 [ %num, %entry ], [ %dec, %while.body ]37  %p_dest.0 = phi ptr [ %dest, %entry ], [ %incdec.ptr2, %while.body ]38  %p_source.0 = phi ptr [ %source, %entry ], [ %incdec.ptr, %while.body ]39  %cmp = icmp eq i32 %num.addr.0, 040  br i1 %cmp, label %while.end, label %while.body41 42while.body:                                       ; preds = %while.cond43  %incdec.ptr = getelementptr inbounds i8, ptr %p_source.0, i32 144  %0 = load i8, ptr %p_source.0, align 145  %1 = trunc i32 %num.addr.0 to i846  %conv1 = add i8 %0, %147  %incdec.ptr2 = getelementptr inbounds i8, ptr %p_dest.0, i32 148  store i8 %conv1, ptr %p_dest.0, align 149  %dec = add i32 %num.addr.0, -150  br label %while.cond51 52while.end:                                        ; preds = %while.cond53  ret void54}55 56; CHECK-LABEL-NOT: define void @LoopCall_internal57define internal void @LoopCall_internal(ptr nocapture %dest, ptr nocapture readonly %source, i32 %num) #0 {58entry:59  %c = icmp ne i32 %num, 060  br i1 %c, label %while.cond, label %while.end61 62while.cond:                                       ; preds = %while.body, %entry63  %num.addr.0 = phi i32 [ %num, %entry ], [ %dec, %while.body ]64  %p_dest.0 = phi ptr [ %dest, %entry ], [ %incdec.ptr2, %while.body ]65  %p_source.0 = phi ptr [ %source, %entry ], [ %incdec.ptr, %while.body ]66  %cmp = icmp eq i32 %num.addr.0, 067  br i1 %cmp, label %while.end, label %while.body68 69while.body:                                       ; preds = %while.cond70  %incdec.ptr = getelementptr inbounds i8, ptr %p_source.0, i32 171  %0 = load i8, ptr %p_source.0, align 172  %1 = trunc i32 %num.addr.0 to i873  %conv1 = add i8 %0, %174  %incdec.ptr2 = getelementptr inbounds i8, ptr %p_dest.0, i32 175  store i8 %conv1, ptr %p_dest.0, align 176  %dec = add i32 %num.addr.0, -177  br label %while.cond78 79while.end:                                        ; preds = %while.cond80  ret void81}82 83; CHECK-LABEL: define void @SimpleCall84define void @SimpleCall(ptr nocapture %dest, ptr nocapture readonly %source, i32 %num) #0 {85entry:86  %arrayidx = getelementptr inbounds i8, ptr %source, i32 %num87  %0 = load i8, ptr %arrayidx, align 188  %1 = xor i8 %0, 12789  %arrayidx2 = getelementptr inbounds i8, ptr %dest, i32 %num90  store i8 %1, ptr %arrayidx2, align 191  ret void92}93 94attributes #0 = { minsize optsize }95 96