1// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s -check-prefix=CPP-DEFAULT 2// RUN: mlir-translate -mlir-to-cpp -declare-variables-at-top %s | FileCheck %s -check-prefix=CPP-DECLTOP 3 4func @test_if(%arg0: i1, %arg1: f32) { 5 scf.if %arg0 { 6 %0 = emitc.call "func_const"(%arg1) : (f32) -> i32 7 } 8 return 9} 10// CPP-DEFAULT: void test_if(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 11// CPP-DEFAULT-NEXT: if ([[V0]]) { 12// CPP-DEFAULT-NEXT: int32_t [[V2:[^ ]*]] = func_const([[V1]]); 13// CPP-DEFAULT-NEXT: ; 14// CPP-DEFAULT-NEXT: } 15// CPP-DEFAULT-NEXT: return; 16 17// CPP-DECLTOP: void test_if(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 18// CPP-DECLTOP-NEXT: int32_t [[V2:[^ ]*]]; 19// CPP-DECLTOP-NEXT: if ([[V0]]) { 20// CPP-DECLTOP-NEXT: [[V2]] = func_const([[V1]]); 21// CPP-DECLTOP-NEXT: ; 22// CPP-DECLTOP-NEXT: } 23// CPP-DECLTOP-NEXT: return; 24 25 26func @test_if_else(%arg0: i1, %arg1: f32) { 27 scf.if %arg0 { 28 %0 = emitc.call "func_true"(%arg1) : (f32) -> i32 29 } else { 30 %0 = emitc.call "func_false"(%arg1) : (f32) -> i32 31 } 32 return 33} 34// CPP-DEFAULT: void test_if_else(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 35// CPP-DEFAULT-NEXT: if ([[V0]]) { 36// CPP-DEFAULT-NEXT: int32_t [[V2:[^ ]*]] = func_true([[V1]]); 37// CPP-DEFAULT-NEXT: ; 38// CPP-DEFAULT-NEXT: } else { 39// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]] = func_false([[V1]]); 40// CPP-DEFAULT-NEXT: ; 41// CPP-DEFAULT-NEXT: } 42// CPP-DEFAULT-NEXT: return; 43 44// CPP-DECLTOP: void test_if_else(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 45// CPP-DECLTOP-NEXT: int32_t [[V2:[^ ]*]]; 46// CPP-DECLTOP-NEXT: int32_t [[V3:[^ ]*]]; 47// CPP-DECLTOP-NEXT: if ([[V0]]) { 48// CPP-DECLTOP-NEXT: [[V2]] = func_true([[V1]]); 49// CPP-DECLTOP-NEXT: ; 50// CPP-DECLTOP-NEXT: } else { 51// CPP-DECLTOP-NEXT: [[V3]] = func_false([[V1]]); 52// CPP-DECLTOP-NEXT: ; 53// CPP-DECLTOP-NEXT: } 54// CPP-DECLTOP-NEXT: return; 55 56 57func @test_if_yield(%arg0: i1, %arg1: f32) { 58 %0 = constant 0 : i8 59 %x, %y = scf.if %arg0 -> (i32, f64) { 60 %1 = emitc.call "func_true_1"(%arg1) : (f32) -> i32 61 %2 = emitc.call "func_true_2"(%arg1) : (f32) -> f64 62 scf.yield %1, %2 : i32, f64 63 } else { 64 %1 = emitc.call "func_false_1"(%arg1) : (f32) -> i32 65 %2 = emitc.call "func_false_2"(%arg1) : (f32) -> f64 66 scf.yield %1, %2 : i32, f64 67 } 68 return 69} 70// CPP-DEFAULT: void test_if_yield(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 71// CPP-DEFAULT-NEXT: int8_t [[V2:[^ ]*]] = 0; 72// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]]; 73// CPP-DEFAULT-NEXT: double [[V4:[^ ]*]]; 74// CPP-DEFAULT-NEXT: if ([[V0]]) { 75// CPP-DEFAULT-NEXT: int32_t [[V5:[^ ]*]] = func_true_1([[V1]]); 76// CPP-DEFAULT-NEXT: double [[V6:[^ ]*]] = func_true_2([[V1]]); 77// CPP-DEFAULT-NEXT: [[V3]] = [[V5]]; 78// CPP-DEFAULT-NEXT: [[V4]] = [[V6]]; 79// CPP-DEFAULT-NEXT: } else { 80// CPP-DEFAULT-NEXT: int32_t [[V7:[^ ]*]] = func_false_1([[V1]]); 81// CPP-DEFAULT-NEXT: double [[V8:[^ ]*]] = func_false_2([[V1]]); 82// CPP-DEFAULT-NEXT: [[V3]] = [[V7]]; 83// CPP-DEFAULT-NEXT: [[V4]] = [[V8]]; 84// CPP-DEFAULT-NEXT: } 85// CPP-DEFAULT-NEXT: return; 86 87// CPP-DECLTOP: void test_if_yield(bool [[V0:[^ ]*]], float [[V1:[^ ]*]]) { 88// CPP-DECLTOP-NEXT: int8_t [[V2:[^ ]*]]; 89// CPP-DECLTOP-NEXT: int32_t [[V3:[^ ]*]]; 90// CPP-DECLTOP-NEXT: double [[V4:[^ ]*]]; 91// CPP-DECLTOP-NEXT: int32_t [[V5:[^ ]*]]; 92// CPP-DECLTOP-NEXT: double [[V6:[^ ]*]]; 93// CPP-DECLTOP-NEXT: int32_t [[V7:[^ ]*]]; 94// CPP-DECLTOP-NEXT: double [[V8:[^ ]*]]; 95// CPP-DECLTOP-NEXT: [[V2]] = 0; 96// CPP-DECLTOP-NEXT: if ([[V0]]) { 97// CPP-DECLTOP-NEXT: [[V5]] = func_true_1([[V1]]); 98// CPP-DECLTOP-NEXT: [[V6]] = func_true_2([[V1]]); 99// CPP-DECLTOP-NEXT: [[V3]] = [[V5]]; 100// CPP-DECLTOP-NEXT: [[V4]] = [[V6]]; 101// CPP-DECLTOP-NEXT: } else { 102// CPP-DECLTOP-NEXT: [[V7]] = func_false_1([[V1]]); 103// CPP-DECLTOP-NEXT: [[V8]] = func_false_2([[V1]]); 104// CPP-DECLTOP-NEXT: [[V3]] = [[V7]]; 105// CPP-DECLTOP-NEXT: [[V4]] = [[V8]]; 106// CPP-DECLTOP-NEXT: } 107// CPP-DECLTOP-NEXT: return; 108