brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 708b41e Raw
108 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=bpf-ir-peephole -mtriple=bpf-pc-linux -S %s | FileCheck %s3; Source:4;   #define AA 405;   struct t {6;     char a[20];7;   };8;   void foo(ptr);9;10;   int test1() {11;     const int a = 8;12;     char tmp[AA + sizeof(struct t) + a];13;     foo(tmp);14;     return 0;15;   }16;17;   int test2(int b) {18;     const int a = 8;19;     char tmp[a + b];20;     foo(tmp);21;     return 0;22;   }23; Compilation flag:24;   clang -target bpf -O2 -S -emit-llvm t.c -Xclang -disable-llvm-passes25 26source_filename = "t.c"27target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"28target triple = "bpf"29 30; Function Attrs: nounwind31define dso_local i32 @test1() {32; CHECK-LABEL: @test1(33; CHECK-NEXT:  entry:34; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 435; CHECK-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 836; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[A]])37; CHECK-NEXT:    store i32 8, ptr [[A]], align 438; CHECK-NEXT:    [[VLA:%.*]] = alloca i8, i64 68, align 139; CHECK-NEXT:    call void @foo(ptr [[VLA]])40; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[A]])41; CHECK-NEXT:    ret i32 042;43entry:44  %a = alloca i32, align 445  %saved_stack = alloca ptr, align 846  call void @llvm.lifetime.start.p0(ptr %a)47  store i32 8, ptr %a, align 448  %0 = call ptr @llvm.stacksave()49  store ptr %0, ptr %saved_stack, align 850  %vla = alloca i8, i64 68, align 151  call void @foo(ptr %vla)52  %1 = load ptr, ptr %saved_stack, align 853  call void @llvm.stackrestore(ptr %1)54  call void @llvm.lifetime.end.p0(ptr %a)55  ret i32 056}57 58declare void @llvm.lifetime.start.p0(ptr nocapture)59 60declare ptr @llvm.stacksave()61 62declare dso_local void @foo(ptr)63 64declare void @llvm.stackrestore(ptr)65 66declare void @llvm.lifetime.end.p0(ptr nocapture)67 68define dso_local i32 @test2(i32 %b) {69; CHECK-LABEL: @test2(70; CHECK-NEXT:  entry:71; CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 472; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 473; CHECK-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 874; CHECK-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 875; CHECK-NEXT:    store i32 [[B:%.*]], ptr [[B_ADDR]], align 476; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[A]])77; CHECK-NEXT:    store i32 8, ptr [[A]], align 478; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[B_ADDR]], align 479; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 8, [[TMP1]]80; CHECK-NEXT:    [[TMP2:%.*]] = zext i32 [[ADD]] to i6481; CHECK-NEXT:    [[VLA:%.*]] = alloca i8, i64 [[TMP2]], align 182; CHECK-NEXT:    store i64 [[TMP2]], ptr [[__VLA_EXPR0]], align 883; CHECK-NEXT:    call void @foo(ptr [[VLA]])84; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[A]])85; CHECK-NEXT:    ret i32 086;87entry:88  %b.addr = alloca i32, align 489  %a = alloca i32, align 490  %saved_stack = alloca ptr, align 891  %__vla_expr0 = alloca i64, align 892  store i32 %b, ptr %b.addr, align 493  call void @llvm.lifetime.start.p0(ptr %a)94  store i32 8, ptr %a, align 495  %0 = load i32, ptr %b.addr, align 496  %add = add nsw i32 8, %097  %1 = zext i32 %add to i6498  %2 = call ptr @llvm.stacksave()99  store ptr %2, ptr %saved_stack, align 8100  %vla = alloca i8, i64 %1, align 1101  store i64 %1, ptr %__vla_expr0, align 8102  call void @foo(ptr %vla)103  %3 = load ptr, ptr %saved_stack, align 8104  call void @llvm.stackrestore(ptr %3)105  call void @llvm.lifetime.end.p0(ptr %a)106  ret i32 0107}108