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_for(%arg0 : index, %arg1 : index, %arg2 : index) { 5 scf.for %i0 = %arg0 to %arg1 step %arg2 { 6 %0 = emitc.call "f"() : () -> i32 7 } 8 return 9} 10// CPP-DEFAULT: void test_for(size_t [[START:[^ ]*]], size_t [[STOP:[^ ]*]], size_t [[STEP:[^ ]*]]) { 11// CPP-DEFAULT-NEXT: for (size_t [[ITER:[^ ]*]] = [[START]]; [[ITER]] < [[STOP]]; [[ITER]] += [[STEP]]) { 12// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]] = f(); 13// CPP-DEFAULT-NEXT: } 14// CPP-DEFAULT-NEXT: return; 15 16// CPP-DECLTOP: void test_for(size_t [[START:[^ ]*]], size_t [[STOP:[^ ]*]], size_t [[STEP:[^ ]*]]) { 17// CPP-DECLTOP-NEXT: int32_t [[V4:[^ ]*]]; 18// CPP-DECLTOP-NEXT: for (size_t [[ITER:[^ ]*]] = [[START]]; [[ITER]] < [[STOP]]; [[ITER]] += [[STEP]]) { 19// CPP-DECLTOP-NEXT: [[V4]] = f(); 20// CPP-DECLTOP-NEXT: } 21// CPP-DECLTOP-NEXT: return; 22 23func @test_for_yield() { 24 %start = constant 0 : index 25 %stop = constant 10 : index 26 %step = constant 1 : index 27 28 %s0 = constant 0 : i32 29 %p0 = constant 1.0 : f32 30 31 %result:2 = scf.for %iter = %start to %stop step %step iter_args(%si = %s0, %pi = %p0) -> (i32, f32) { 32 %sn = emitc.call "add"(%si, %iter) : (i32, index) -> i32 33 %pn = emitc.call "mul"(%pi, %iter) : (f32, index) -> f32 34 scf.yield %sn, %pn : i32, f32 35 } 36 37 return 38} 39// CPP-DEFAULT: void test_for_yield() { 40// CPP-DEFAULT-NEXT: size_t [[START:[^ ]*]] = 0; 41// CPP-DEFAULT-NEXT: size_t [[STOP:[^ ]*]] = 10; 42// CPP-DEFAULT-NEXT: size_t [[STEP:[^ ]*]] = 1; 43// CPP-DEFAULT-NEXT: int32_t [[S0:[^ ]*]] = 0; 44// CPP-DEFAULT-NEXT: float [[P0:[^ ]*]] = (float)1.000000000e+00; 45// CPP-DEFAULT-NEXT: int32_t [[SE:[^ ]*]]; 46// CPP-DEFAULT-NEXT: float [[PE:[^ ]*]]; 47// CPP-DEFAULT-NEXT: int32_t [[SI:[^ ]*]] = [[S0]]; 48// CPP-DEFAULT-NEXT: float [[PI:[^ ]*]] = [[P0]]; 49// CPP-DEFAULT-NEXT: for (size_t [[ITER:[^ ]*]] = [[START]]; [[ITER]] < [[STOP]]; [[ITER]] += [[STEP]]) { 50// CPP-DEFAULT-NEXT: int32_t [[SN:[^ ]*]] = add([[SI]], [[ITER]]); 51// CPP-DEFAULT-NEXT: float [[PN:[^ ]*]] = mul([[PI]], [[ITER]]); 52// CPP-DEFAULT-NEXT: [[SI]] = [[SN]]; 53// CPP-DEFAULT-NEXT: [[PI]] = [[PN]]; 54// CPP-DEFAULT-NEXT: } 55// CPP-DEFAULT-NEXT: [[SE]] = [[SI]]; 56// CPP-DEFAULT-NEXT: [[PE]] = [[PI]]; 57// CPP-DEFAULT-NEXT: return; 58 59// CPP-DECLTOP: void test_for_yield() { 60// CPP-DECLTOP-NEXT: size_t [[START:[^ ]*]]; 61// CPP-DECLTOP-NEXT: size_t [[STOP:[^ ]*]]; 62// CPP-DECLTOP-NEXT: size_t [[STEP:[^ ]*]]; 63// CPP-DECLTOP-NEXT: int32_t [[S0:[^ ]*]]; 64// CPP-DECLTOP-NEXT: float [[P0:[^ ]*]]; 65// CPP-DECLTOP-NEXT: int32_t [[SE:[^ ]*]]; 66// CPP-DECLTOP-NEXT: float [[PE:[^ ]*]]; 67// CPP-DECLTOP-NEXT: int32_t [[SN:[^ ]*]]; 68// CPP-DECLTOP-NEXT: float [[PN:[^ ]*]]; 69// CPP-DECLTOP-NEXT: [[START]] = 0; 70// CPP-DECLTOP-NEXT: [[STOP]] = 10; 71// CPP-DECLTOP-NEXT: [[STEP]] = 1; 72// CPP-DECLTOP-NEXT: [[S0]] = 0; 73// CPP-DECLTOP-NEXT: [[P0]] = (float)1.000000000e+00; 74// CPP-DECLTOP-NEXT: int32_t [[SI:[^ ]*]] = [[S0]]; 75// CPP-DECLTOP-NEXT: float [[PI:[^ ]*]] = [[P0]]; 76// CPP-DECLTOP-NEXT: for (size_t [[ITER:[^ ]*]] = [[START]]; [[ITER]] < [[STOP]]; [[ITER]] += [[STEP]]) { 77// CPP-DECLTOP-NEXT: [[SN]] = add([[SI]], [[ITER]]); 78// CPP-DECLTOP-NEXT: [[PN]] = mul([[PI]], [[ITER]]); 79// CPP-DECLTOP-NEXT: [[SI]] = [[SN]]; 80// CPP-DECLTOP-NEXT: [[PI]] = [[PN]]; 81// CPP-DECLTOP-NEXT: } 82// CPP-DECLTOP-NEXT: [[SE]] = [[SI]]; 83// CPP-DECLTOP-NEXT: [[PE]] = [[PI]]; 84// CPP-DECLTOP-NEXT: return; 85