; RUN: mlir-translate -import-llvm -split-input-file %s | FileCheck %s ; Verify the import works if the blocks are not topologically sorted. ; CHECK-LABEL: @dominance_order ; CHECK-SAME: %[[ARG1:[a-zA-Z0-9]+]] define i64 @dominance_order(i64 %arg1) { ; CHECK: llvm.br ^[[BB2:.+]] br label %bb2 bb1: ; CHECK: ^[[BB1:[a-zA-Z0-9]+]]: ; CHECK: llvm.return %[[VAL1:.+]] : i64 ret i64 %1 bb2: ; CHECK: ^[[BB2]]: ; CHECK: %[[VAL1]] = llvm.add %[[ARG1]] %1 = add i64 %arg1, 3 ; CHECK: llvm.br ^[[BB1]] br label %bb1 } ; // ----- ; CHECK-LABEL: @block_argument ; CHECK-SAME: %[[ARG1:[a-zA-Z0-9]+]] ; CHECK-SAME: %[[ARG2:[a-zA-Z0-9]+]] define i64 @block_argument(i1 %arg1, i64 %arg2) { entry: ; CHECK: llvm.cond_br %[[ARG1]] ; CHECK-SAME: ^[[BB1:.+]](%[[ARG2]] : i64) ; CHECK-SAME: ^[[BB2:.+]] br i1 %arg1, label %bb1, label %bb2 bb1: ; CHECK: ^[[BB1]](%[[BA1:.+]]: i64): ; CHECK: llvm.return %[[BA1]] : i64 %0 = phi i64 [ %arg2, %entry ], [ %1, %bb2 ] ret i64 %0 bb2: ; CHECK: ^[[BB2]]: ; CHECK: %[[VAL1:.+]] = llvm.add %[[ARG2]] ; CHECK: llvm.br ^[[BB1]](%[[VAL1]] %1 = add i64 %arg2, 3 br label %bb1 } ; // ----- ; CHECK-LABEL: @simple_switch( ; CHECK-SAME: %[[ARG1:[a-zA-Z0-9]+]] define i64 @simple_switch(i64 %arg1) { ; CHECK: %[[VAL1:.+]] = llvm.add ; CHECK: %[[VAL2:.+]] = llvm.sub ; CHECK: %[[VAL3:.+]] = llvm.mul %1 = add i64 %arg1, 42 %2 = sub i64 %arg1, 42 %3 = mul i64 %arg1, 42 ; CHECK: llvm.switch %[[ARG1]] : i64, ^[[BBD:.+]] [ ; CHECK: 0: ^[[BB1:.+]], ; CHECK: 9: ^[[BB2:.+]] ; CHECK: ] switch i64 %arg1, label %bbd [ i64 0, label %bb1 i64 9, label %bb2 ] bb1: ; CHECK: ^[[BB1]]: ; CHECK: llvm.return %[[VAL1]] ret i64 %1 bb2: ; CHECK: ^[[BB2]]: ; CHECK: llvm.return %[[VAL2]] ret i64 %2 bbd: ; CHECK: ^[[BBD]]: ; CHECK: llvm.return %[[VAL3]] ret i64 %3 } ; // ----- ; CHECK-LABEL: @switch_args ; CHECK-SAME: %[[ARG1:[a-zA-Z0-9]+]] define i32 @switch_args(i32 %arg1) { entry: ; CHECK: %[[VAL1:.+]] = llvm.add ; CHECK: %[[VAL2:.+]] = llvm.sub ; CHECK: %[[VAL3:.+]] = llvm.mul %0 = add i32 %arg1, 42 %1 = sub i32 %arg1, 42 %2 = mul i32 %arg1, 42 ; CHECK: llvm.switch %[[ARG1]] : i32, ^[[BBD:.+]](%[[VAL3]] : i32) [ ; CHECK: 0: ^[[BB1:.+]](%[[VAL1]], %[[VAL2]] : i32, i32) ; CHECK: ] switch i32 %arg1, label %bbd [ i32 0, label %bb1 ] bb1: ; CHECK: ^[[BB1]](%[[BA1:.+]]: i32, %[[BA2:.+]]: i32): ; CHECK: %[[VAL1:.*]] = llvm.add %[[BA1]], %[[BA2]] : i32 %3 = phi i32 [%0, %entry] %4 = phi i32 [%1, %entry] %5 = add i32 %3, %4 ; CHECK: llvm.br ^[[BBD]](%[[VAL1]] br label %bbd bbd: ; CHECK: ^[[BBD]](%[[BA3:.+]]: i32): ; CHECK: llvm.return %[[BA3]] %6 = phi i32 [%2, %entry], [%5, %bb1] ret i32 %6 }