brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 0e97f57 Raw
97 lines · plain
1; RUN: opt -passes='loop-mssa(licm),print<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s2; REQUIRES: asserts3 4@arr = global [12 x i8] [i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12], align 15 6; CHECK-LABEL: @func()7define void @func()  {8entry:9  %res.addr.i = alloca i8, align 110  %sum = alloca i8, align 111  %n = alloca i8, align 112  %i = alloca i8, align 113  %cleanup.dest.slot = alloca i32, align 114  call  void @llvm.lifetime.start.p0(ptr %sum) #315  store i8 0, ptr %sum, align 116  call  void @llvm.lifetime.start.p0(ptr %n) #317  %call = call  i8 @idi(i8 10)18  store i8 %call, ptr %n, align 119  call  void @llvm.lifetime.start.p0(ptr %i) #320  store i8 0, ptr %i, align 121  br label %for.cond22 23for.cond:                                         ; preds = %for.inc, %entry24  %0 = load i8, ptr %i, align 125  %1 = load i8, ptr %n, align 126  %cmp = icmp slt i8 %0, %127  br i1 %cmp, label %for.body, label %for.cond.cleanup28 29for.cond.cleanup:                                 ; preds = %for.cond30  store i32 2, ptr %cleanup.dest.slot, align 131  br label %final.cleanup32 33for.body:                                         ; preds = %for.cond34  %2 = load i8, ptr %i, align 135  %idxprom = sext i8 %2 to i3236  %arrayidx = getelementptr inbounds [12 x i8], ptr @arr, i32 0, i32 %idxprom37  %3 = load i8, ptr %arrayidx, align 138  %cmp1 = icmp eq i8 %3, 339  br i1 %cmp1, label %if.then, label %if.end40 41if.then:                                          ; preds = %for.body42  store i32 2, ptr %cleanup.dest.slot, align 143  br label %final.cleanup44 45if.end:                                           ; preds = %for.body46  %4 = load i8, ptr %i, align 147  %idxprom2 = sext i8 %4 to i3248  %arrayidx3 = getelementptr inbounds [12 x i8], ptr @arr, i32 0, i32 %idxprom249  %5 = load i8, ptr %arrayidx3, align 150  %6 = load i8, ptr %sum, align 151  %add = add nsw i8 %6, %552  store i8 %add, ptr %sum, align 153  br label %for.inc54 55for.inc:                                          ; preds = %if.end56  %7 = load i8, ptr %i, align 157  %inc = add nsw i8 %7, 158  store i8 %inc, ptr %i, align 159  br label %for.cond60 61; CHECK: final.cleanup:62; CHECK-NEXT: ; [[NO20:.*]] = MemoryPhi({if.then,[[NO9:.*]]},{for.cond.cleanup,[[NO8:.*]]})63; CHECK-NEXT: ; [[NO12:.*]] = MemoryDef([[NO20]])64; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr %i)65final.cleanup:                                          ; preds = %if.then, %for.cond.cleanup66  call  void @llvm.lifetime.end.p0(ptr %i) #367  br label %for.end68 69; CHECK: for.end:70; CHECK-NEXT: ; MemoryUse([[NO20]])71; CHECK-NEXT:  %3 = load i8, ptr %sum, align 172for.end:                                          ; preds = %final.cleanup73  %8 = load i8, ptr %sum, align 174  call  void @llvm.lifetime.start.p0(ptr %res.addr.i)75  store i8 %8, ptr %res.addr.i, align 176  %9 = load i8, ptr %res.addr.i, align 177  call  void @foo(i8 %9) #378  call  void @llvm.lifetime.end.p0(ptr %res.addr.i)79  call  void @llvm.lifetime.end.p0(ptr %n) #380  call  void @llvm.lifetime.end.p0(ptr %sum) #381  ret void82}83 84; Function Attrs: argmemonly nofree nosync nounwind willreturn85declare void @llvm.lifetime.start.p0(ptr nocapture)  #186 87declare i8 @idi(i8)88 89; Function Attrs: argmemonly nofree nosync nounwind willreturn90declare void @llvm.lifetime.end.p0(ptr nocapture)  #191 92; Function Attrs: nounwind93declare void @foo(i8)94 95attributes #1 = { argmemonly nofree nosync nounwind willreturn }96attributes #3 = { nounwind }97