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