brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · c0c4e1a Raw
144 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -p iroutliner,verify -ir-outlining-no-cost < %s | FileCheck %s3 4; This test ensures that we do not include llvm.assumes.  There are exceptions5; in the CodeExtractor's algorithm for llvm.assumes, so we ignore it for now.6 7define void @outline_assumes() {8; CHECK-LABEL: @outline_assumes(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[DL_LOC:%.*]] = alloca i1, align 111; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 412; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 413; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 414; CHECK-NEXT:    [[D:%.*]] = alloca i1, align 415; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[DL_LOC]])16; CHECK-NEXT:    call void @outlined_ir_func_4(i1 true, ptr [[D]], ptr [[DL_LOC]])17; CHECK-NEXT:    [[DL_RELOAD:%.*]] = load i1, ptr [[DL_LOC]], align 118; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[DL_LOC]])19; CHECK-NEXT:    [[SPLIT_INST:%.*]] = sub i1 [[DL_RELOAD]], [[DL_RELOAD]]20; CHECK-NEXT:    call void @outlined_ir_func_1(ptr [[A]], ptr [[B]], ptr [[C]])21; CHECK-NEXT:    call void @llvm.assume(i1 [[DL_RELOAD]])22; CHECK-NEXT:    call void @outlined_ir_func_2(ptr [[A]], ptr [[B]], ptr [[C]])23; CHECK-NEXT:    ret void24;25entry:26  %a = alloca i32, align 427  %b = alloca i32, align 428  %c = alloca i32, align 429  %d = alloca i1, align 430  store i1 1, ptr %d, align 431  %dl = load i1, ptr %d32  %split_inst = sub i1 %dl, %dl33  store i32 2, ptr %a, align 434  store i32 3, ptr %b, align 435  store i32 4, ptr %c, align 436  call void @llvm.assume(i1 %dl)37  %al = load i32, ptr %a38  %bl = load i32, ptr %b39  %cl = load i32, ptr %c40  ret void41}42 43define void @outline_assumes2() {44; CHECK-LABEL: @outline_assumes2(45; CHECK-NEXT:  entry:46; CHECK-NEXT:    [[DL_LOC:%.*]] = alloca i1, align 147; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 448; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 449; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 450; CHECK-NEXT:    [[D:%.*]] = alloca i1, align 451; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[DL_LOC]])52; CHECK-NEXT:    call void @outlined_ir_func_4(i1 false, ptr [[D]], ptr [[DL_LOC]])53; CHECK-NEXT:    [[DL_RELOAD:%.*]] = load i1, ptr [[DL_LOC]], align 154; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[DL_LOC]])55; CHECK-NEXT:    call void @outlined_ir_func_1(ptr [[A]], ptr [[B]], ptr [[C]])56; CHECK-NEXT:    call void @llvm.assume(i1 [[DL_RELOAD]])57; CHECK-NEXT:    call void @outlined_ir_func_2(ptr [[A]], ptr [[B]], ptr [[C]])58; CHECK-NEXT:    ret void59;60entry:61  %a = alloca i32, align 462  %b = alloca i32, align 463  %c = alloca i32, align 464  %d = alloca i1, align 465  store i1 0, ptr %d, align 466  %dl = load i1, ptr %d67  store i32 2, ptr %a, align 468  store i32 3, ptr %b, align 469  store i32 4, ptr %c, align 470  call void @llvm.assume(i1 %dl)71  %al = load i32, ptr %a72  %bl = load i32, ptr %b73  %cl = load i32, ptr %c74  ret void75}76 77define void @outline_assumes3() {78; CHECK-LABEL: @outline_assumes3(79; CHECK-NEXT:  entry:80; CHECK-NEXT:    [[DL_LOC:%.*]] = alloca i1, align 181; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 482; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 483; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 484; CHECK-NEXT:    [[D:%.*]] = alloca i1, align 485; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[DL_LOC]])86; CHECK-NEXT:    call void @outlined_ir_func_0(i1 true, ptr [[D]], ptr [[A]], ptr [[B]], ptr [[C]], ptr [[DL_LOC]])87; CHECK-NEXT:    [[DL_RELOAD:%.*]] = load i1, ptr [[DL_LOC]], align 188; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[DL_LOC]])89; CHECK-NEXT:    call void @llvm.assume(i1 [[DL_RELOAD]])90; CHECK-NEXT:    call void @outlined_ir_func_3(ptr [[A]])91; CHECK-NEXT:    ret void92;93entry:94  %a = alloca i32, align 495  %b = alloca i32, align 496  %c = alloca i32, align 497  %d = alloca i1, align 498  store i1 1, ptr %d, align 499  %dl = load i1, ptr %d100  %split_inst = add i1 %dl, %dl101  store i32 2, ptr %a, align 4102  store i32 3, ptr %b, align 4103  store i32 4, ptr %c, align 4104  call void @llvm.assume(i1 %dl)105  %al = load i32, ptr %a106  %bl = add i32 %al, %al107  ret void108}109 110define void @outline_assumes4() {111; CHECK-LABEL: @outline_assumes4(112; CHECK-NEXT:  entry:113; CHECK-NEXT:    [[DL_LOC:%.*]] = alloca i1, align 1114; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4115; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 4116; CHECK-NEXT:    [[C:%.*]] = alloca i32, align 4117; CHECK-NEXT:    [[D:%.*]] = alloca i1, align 4118; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[DL_LOC]])119; CHECK-NEXT:    call void @outlined_ir_func_0(i1 false, ptr [[D]], ptr [[A]], ptr [[B]], ptr [[C]], ptr [[DL_LOC]])120; CHECK-NEXT:    [[DL_RELOAD:%.*]] = load i1, ptr [[DL_LOC]], align 1121; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[DL_LOC]])122; CHECK-NEXT:    call void @llvm.assume(i1 [[DL_RELOAD]])123; CHECK-NEXT:    call void @outlined_ir_func_3(ptr [[A]])124; CHECK-NEXT:    ret void125;126entry:127  %a = alloca i32, align 4128  %b = alloca i32, align 4129  %c = alloca i32, align 4130  %d = alloca i1, align 4131  store i1 0, ptr %d, align 4132  %dl = load i1, ptr %d133  %split_inst = add i1 %dl, %dl134  store i32 2, ptr %a, align 4135  store i32 3, ptr %b, align 4136  store i32 4, ptr %c, align 4137  call void @llvm.assume(i1 %dl)138  %al = load i32, ptr %a139  %bl = add i32 %al, %al140  ret void141}142 143declare void @llvm.assume(i1)144