brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · b7cbd78 Raw
129 lines · plain
1// RUN: mlir-opt %s --pass-pipeline='builtin.module(llvm.func(mem2reg{region-simplify=false}))' | FileCheck %s2 3llvm.func @use(i64)4llvm.func @use_ptr(!llvm.ptr)5 6#di_basic_type = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "ptr sized type", sizeInBits = 64>7#di_file = #llvm.di_file<"test.ll" in "">8#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C_plus_plus_14, file = #di_file, producer = "clang", isOptimized = false, emissionKind = Full>9#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "blah", linkageName = "blah", file = #di_file, line = 7, subprogramFlags = Definition>10// CHECK: #[[$VAR:.*]] = #llvm.di_local_variable<{{.*}}name = "ptr sized var"{{.*}}>11#di_local_variable = #llvm.di_local_variable<scope = #di_subprogram, name = "ptr sized var", file = #di_file, line = 7, arg = 1, type = #di_basic_type>12#di_local_variable_2 = #llvm.di_local_variable<scope = #di_subprogram, name = "ptr sized var 2", file = #di_file, line = 7, arg = 1, type = #di_basic_type>13 14// CHECK-LABEL: llvm.func @basic_store_load15llvm.func @basic_store_load(%arg0: i64) -> i64 {16  %0 = llvm.mlir.constant(1 : i32) : i3217  // CHECK-NOT: = llvm.alloca18  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr19  // CHECK-NOT: llvm.store20  llvm.store %arg0, %1 {alignment = 4 : i64} : i64, !llvm.ptr21  // CHECK-NOT: llvm.intr.dbg.declare22  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr23  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[LOADED:.*]] : i6424  // CHECK-NOT: llvm.intr.dbg.value25  // CHECK-NOT: llvm.intr.dbg.declare26  // CHECK-NOT: llvm.store27  %2 = llvm.load %1 {alignment = 4 : i64} : !llvm.ptr -> i6428  // CHECK: llvm.return %[[LOADED]] : i6429  llvm.return %2 : i6430}31 32// CHECK-LABEL: llvm.func @multiple_store_load33llvm.func @multiple_store_load(%arg0: i64) -> i64 {34  %0 = llvm.mlir.constant(1 : i32) : i3235  // CHECK-NOT: = llvm.alloca36  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr37  // CHECK-NOT: llvm.intr.dbg.declare38  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr39  // CHECK-NOT: llvm.store40  llvm.store %arg0, %1 {alignment = 4 : i64} : i64, !llvm.ptr41  // CHECK-NOT: llvm.intr.dbg.declare42  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr43  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[LOADED:.*]] : i6444  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[LOADED]] : i6445  // CHECK-NOT: llvm.intr.dbg.value46  // CHECK-NOT: llvm.intr.dbg.declare47  // CHECK-NOT: llvm.store48  %2 = llvm.load %1 {alignment = 4 : i64} : !llvm.ptr -> i6449  // CHECK: llvm.return %[[LOADED]] : i6450  llvm.return %2 : i6451}52 53// CHECK-LABEL: llvm.func @block_argument_value54// CHECK-SAME: (%[[ARG0:.*]]: i64, {{.*}})55llvm.func @block_argument_value(%arg0: i64, %arg1: i1) -> i64 {56  %0 = llvm.mlir.constant(1 : i32) : i3257  // CHECK-NOT: = llvm.alloca58  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr59  // CHECK-NOT: llvm.intr.dbg.declare60  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr61  llvm.cond_br %arg1, ^bb1, ^bb262// CHECK: ^{{.*}}:63^bb1:64  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[ARG0]]65  // CHECK-NOT: llvm.intr.dbg.value66  llvm.store %arg0, %1 {alignment = 4 : i64} : i64, !llvm.ptr67  llvm.br ^bb268// CHECK: ^{{.*}}(%[[BLOCKARG:.*]]: i64):69^bb2:70  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[BLOCKARG]]71  %2 = llvm.load %1 {alignment = 4 : i64} : !llvm.ptr -> i6472  llvm.return %2 : i6473}74 75// CHECK-LABEL: llvm.func @double_block_argument_value76// CHECK-SAME: (%[[ARG0:.*]]: i64, {{.*}})77llvm.func @double_block_argument_value(%arg0: i64, %arg1: i1) -> i64 {78  %0 = llvm.mlir.constant(1 : i32) : i3279  // CHECK-NOT: = llvm.alloca80  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr81  // CHECK-NOT: llvm.intr.dbg.declare82  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr83  llvm.cond_br %arg1, ^bb1, ^bb284// CHECK: ^{{.*}}(%[[BLOCKARG1:.*]]: i64):85^bb1:86  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[BLOCKARG1]]87  %2 = llvm.load %1 {alignment = 4 : i64} : !llvm.ptr -> i6488  llvm.call @use(%2) : (i64) -> ()89  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[ARG0]]90  llvm.store %arg0, %1 {alignment = 4 : i64} : i64, !llvm.ptr91  llvm.br ^bb292  // CHECK-NOT: llvm.intr.dbg.value93// CHECK: ^{{.*}}(%[[BLOCKARG2:.*]]: i64):94^bb2:95  // CHECK: llvm.intr.dbg.value #[[$VAR]] = %[[BLOCKARG2]]96  llvm.br ^bb197}98 99// CHECK-LABEL: llvm.func @always_drop_promoted_declare100// CHECK: %[[UNDEF:.*]] = llvm.mlir.undef101// CHECK-NOT: = llvm.alloca102// CHECK-NOT: llvm.intr.dbg.declare103// CHECK: llvm.intr.dbg.value #{{.*}} = %[[UNDEF]]104llvm.func @always_drop_promoted_declare() {105  %0 = llvm.mlir.constant(1 : i32) : i32106  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr107  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr108  llvm.intr.dbg.value #di_local_variable = %1 : !llvm.ptr109  llvm.return110}111 112// CHECK-LABEL: llvm.func @keep_dbg_if_not_promoted113llvm.func @keep_dbg_if_not_promoted() {114  %0 = llvm.mlir.constant(1 : i32) : i32115  // CHECK: %[[ALLOCA:.*]] = llvm.alloca116  %1 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr117  // CHECK-NOT: = llvm.alloca118  // CHECK-NOT: llvm.intr.dbg.declare119  // CHECK: llvm.intr.dbg.declare #[[$VAR]] = %[[ALLOCA]]120  // CHECK-NOT: = llvm.alloca121  // CHECK-NOT: llvm.intr.dbg.declare122  // CHECK: llvm.call @use_ptr(%[[ALLOCA]])123  llvm.intr.dbg.declare #di_local_variable = %1 : !llvm.ptr124  %2 = llvm.alloca %0 x i64 {alignment = 8 : i64} : (i32) -> !llvm.ptr125  llvm.intr.dbg.declare #di_local_variable_2 = %2 : !llvm.ptr126  llvm.call @use_ptr(%1) : (!llvm.ptr) -> ()127  llvm.return128}129