brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · befc489 Raw
94 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost -ir-sim-calls-by-name < %s | FileCheck %s3 4; This test checks that we do can outline calls, but only if they have the same5; function type and the same name.6 7declare void @f1(ptr, ptr);8declare void @f2(ptr, ptr);9 10define void @function1() {11; CHECK-LABEL: @function1(12; CHECK-NEXT:  entry:13; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 414; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 415; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 416; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]])17; CHECK-NEXT:    ret void18;19entry:20  %a = alloca i32, align 421  %b = alloca i32, align 422  %c = alloca i32, align 423  store i32 2, ptr %a, align 424  store i32 3, ptr %b, align 425  store i32 4, ptr %c, align 426  call void @f1(ptr %a, ptr %b)27  %al = load i32, ptr %a28  %bl = load i32, ptr %b29  %cl = load i32, ptr %c30  ret void31}32 33define void @function2() {34; CHECK-LABEL: @function2(35; CHECK-NEXT:  entry:36; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 437; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 438; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 439; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]])40; CHECK-NEXT:    ret void41;42entry:43  %a = alloca i32, align 444  %b = alloca i32, align 445  %c = alloca i32, align 446  store i32 2, ptr %a, align 447  store i32 3, ptr %b, align 448  store i32 4, ptr %c, align 449  call void @f1(ptr %a, ptr %b)50  %al = load i32, ptr %a51  %bl = load i32, ptr %b52  %cl = load i32, ptr %c53  ret void54}55 56define void @function3() {57; CHECK-LABEL: @function3(58; CHECK-NEXT:  entry:59; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 460; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 461; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 462; CHECK-NEXT:    store i32 2, ptr [[A]], align 463; CHECK-NEXT:    store i32 3, ptr [[B]], align 464; CHECK-NEXT:    store i32 4, ptr [[C]], align 465; CHECK-NEXT:    call void @f2(ptr [[A]], ptr [[B]])66; CHECK-NEXT:    [[AL:%.*]] = load i32, ptr [[A]], align 467; CHECK-NEXT:    [[BL:%.*]] = load i32, ptr [[B]], align 468; CHECK-NEXT:    [[CL:%.*]] = load i32, ptr [[C]], align 469; CHECK-NEXT:    ret void70;71entry:72  %a = alloca i32, align 473  %b = alloca i32, align 474  %c = alloca i32, align 475  store i32 2, ptr %a, align 476  store i32 3, ptr %b, align 477  store i32 4, ptr %c, align 478  call void @f2(ptr %a, ptr %b)79  %al = load i32, ptr %a80  %bl = load i32, ptr %b81  %cl = load i32, ptr %c82  ret void83}84 85; CHECK: define internal void @outlined_ir_func_0(ptr [[ARG0:%.*]], ptr [[ARG1:%.*]], ptr [[ARG2:%.*]])86; CHECK: entry_to_outline:87; CHECK-NEXT:    store i32 2, ptr [[ARG0]], align 488; CHECK-NEXT:    store i32 3, ptr [[ARG1]], align 489; CHECK-NEXT:    store i32 4, ptr [[ARG2]], align 490; CHECK-NEXT:    call void @f1(ptr [[ARG0]], ptr [[ARG1]])91; CHECK-NEXT:    [[AL:%.*]] = load i32, ptr [[ARG0]], align 492; CHECK-NEXT:    [[BL:%.*]] = load i32, ptr [[ARG1]], align 493; CHECK-NEXT:    [[CL:%.*]] = load i32, ptr [[ARG2]], align 494