brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 5382207 Raw
41 lines · plain
1// RUN: mlir-translate -mlir-to-llvmir %s -split-input-file | FileCheck %s2 3llvm.func @callee(!llvm.ptr, i32, i32) -> i324 5// CHECK: define i32 @test_indirectbr_phi(ptr %[[IN_PTR:.*]], ptr %[[ARG1:.*]], i32 %[[ARG2:.*]]) {6llvm.func @test_indirectbr_phi(%arg0: !llvm.ptr, %arg1: !llvm.ptr, %arg3: i32) -> i32 {7  %0 = llvm.mlir.undef : i18  %2 = llvm.blockaddress <function = @test_indirectbr_phi, tag = <id = 1>> : !llvm.ptr9  %3 = llvm.mlir.constant(1 : i32) : i3210  %4 = llvm.mlir.constant(2 : i32) : i3211  %5 = llvm.select %0, %2, %arg0 : i1, !llvm.ptr12  // CHECK:   %[[BA0:.*]] = select i1 undef, ptr blockaddress(@test_indirectbr_phi, %[[RET_BB:.*]]), ptr %[[IN_PTR]]13  // CHECK:   indirectbr ptr %[[BA0]], [label %[[BB1:.*]], label %[[BB2:.*]]]14  llvm.indirectbr %5 : !llvm.ptr, [15  ^bb1,16  ^bb2(%3 : i32)17  ]18^bb1:19  // CHECK: [[BB1]]:20  // CHECK:   %[[BA1:.*]] = select i1 undef, ptr blockaddress(@test_indirectbr_phi, %[[RET_BB]]), ptr %[[IN_PTR]]21  // CHECK:   indirectbr ptr %[[BA1]], [label %[[BB2]], label %[[RET_BB]]]22  %6 = llvm.select %0, %2, %arg0 : i1, !llvm.ptr23  llvm.indirectbr %6 : !llvm.ptr, [24  ^bb2(%4 : i32),25  ^bb326  ]27^bb2(%7: i32):28  // CHECK: [[BB2]]:29  // CHECK:   %[[PHI:.*]] = phi i32 [ 2, %[[BB1]] ], [ 1, {{.*}} ]30  // CHECK:   %[[CALL:.*]] = call i32 @callee(ptr %[[ARG1]], i32 %[[ARG2]], i32 %[[PHI]])31  // CHECK:   ret i32 %[[CALL]]32  %8 = llvm.call @callee(%arg1, %arg3, %7) : (!llvm.ptr, i32, i32) -> i3233  llvm.return %8 : i3234^bb3:35  // CHECK: [[RET_BB]]:36  // CHECK:   ret i32 %[[ARG2]]37  // CHECK: }38  llvm.blocktag <id = 1>39  llvm.return %arg3 : i3240}41