brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 38cbc81 Raw
169 lines · plain
1// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s -check-prefix=CPP-DEFAULT2 3 4// CPP-DEFAULT-LABEL: void emitc_do(5// CPP-DEFAULT:         int32_t* [[VAL_1:v[0-9]+]]) {6// CPP-DEFAULT:         int32_t [[VAL_2:v[0-9]+]] = 0;7// CPP-DEFAULT:         do {8// CPP-DEFAULT:           printf("%d", *[[VAL_1]]);9// CPP-DEFAULT:           int32_t [[VAL_3:v[0-9]+]] = [[VAL_2]];10// CPP-DEFAULT:           int32_t [[VAL_4:v[0-9]+]] = [[VAL_3]] + 1;11// CPP-DEFAULT:           [[VAL_2]] = [[VAL_4]];12// CPP-DEFAULT:         } while ([[VAL_2]] <= 10);13// CPP-DEFAULT:         return;14// CPP-DEFAULT:       }15 16emitc.func @emitc_do(%arg0 : !emitc.ptr<i32>) {17  %var = "emitc.variable"() <{value = 0 : i32}> : () -> !emitc.lvalue<i32>18  %0 = literal "10" : i3219  %1 = literal "1" : i3220 21  do {22    verbatim "printf(\"%d\", *{});" args %arg0 : !emitc.ptr<i32>23    %var_load = load %var : <i32>24    %tmp_add = add %var_load, %1 : (i32, i32) -> i3225    "emitc.assign"(%var, %tmp_add) : (!emitc.lvalue<i32>, i32) -> ()26  } while {27    %r = expression %var, %0 : (!emitc.lvalue<i32>, i32) -> i1 {28      %var_load = load %var : <i32>29      %cmp = cmp le, %var_load, %0 : (i32, i32) -> i130      yield %cmp : i131    }32    33    yield %r : i134  }35 36  return37}38 39 40// CPP-DEFAULT-LABEL: void emitc_do_with_expression(41// CPP-DEFAULT:         int32_t* [[VAL_1:v[0-9]+]]) {42// CPP-DEFAULT:         int32_t [[VAL_2:v[0-9]+]] = 0;43// CPP-DEFAULT:         int32_t [[VAL_3:v[0-9]+]] = 10 + 1;44// CPP-DEFAULT:         do {45// CPP-DEFAULT:           printf("%d", *[[VAL_1]]);46// CPP-DEFAULT:           int32_t [[VAL_4:v[0-9]+]] = [[VAL_2]];47// CPP-DEFAULT:           int32_t [[VAL_5:v[0-9]+]] = [[VAL_4]] + 1;48// CPP-DEFAULT:           [[VAL_2]] = [[VAL_5]];49// CPP-DEFAULT:         } while ([[VAL_2]] <= [[VAL_3]]);50// CPP-DEFAULT:         return;51// CPP-DEFAULT:       }52 53emitc.func @emitc_do_with_expression(%arg0 : !emitc.ptr<i32>) {54  %var = "emitc.variable"() <{value = 0 : i32}> : () -> !emitc.lvalue<i32>55  %0 = literal "10" : i3256  %1 = literal "1" : i3257 58  %add = expression %0, %1 : (i32, i32) -> i32 {59    %add = add %0, %1 : (i32, i32) -> i3260    yield %add : i3261  }62 63  do {64    verbatim "printf(\"%d\", *{});" args %arg0 : !emitc.ptr<i32>65    %var_load = load %var : <i32>66    %tmp_add = add %var_load, %1 : (i32, i32) -> i3267    "emitc.assign"(%var, %tmp_add) : (!emitc.lvalue<i32>, i32) -> ()68  } while {69    %r = expression %var, %add : (!emitc.lvalue<i32>, i32) -> i1 {70      %var_load = load %var : <i32>71      %cmp = cmp le, %var_load, %add : (i32, i32) -> i172      yield %cmp : i173    }74 75    yield %r : i176  }77 78  return79}80 81 82// CPP-DEFAULT-LABEL: void emitc_double_do()83// CPP-DEFAULT:         int32_t [[VAL_1:v[0-9]+]] = 0;84// CPP-DEFAULT:         int32_t [[VAL_2:v[0-9]+]] = 0;85// CPP-DEFAULT:         do {86// CPP-DEFAULT:           int32_t [[VAL_3:v[0-9]+]] = [[VAL_1]];87// CPP-DEFAULT:           do {88// CPP-DEFAULT:             int32_t [[VAL_4:v[0-9]+]] = [[VAL_2]];89// CPP-DEFAULT:             printf("i = %d, j = %d", [[VAL_3]], [[VAL_4]]);90// CPP-DEFAULT:             int32_t [[VAL_5:v[0-9]+]] = [[VAL_4]] + 1;91// CPP-DEFAULT:             [[VAL_2]] = [[VAL_5]];92// CPP-DEFAULT:           } while ([[VAL_2]] <= 5);93// CPP-DEFAULT:           int32_t [[VAL_6:v[0-9]+]] = [[VAL_3]] + 1;94// CPP-DEFAULT:           [[VAL_1]] = [[VAL_6]];95// CPP-DEFAULT:         } while ([[VAL_1]] <= 3);96// CPP-DEFAULT:         return;97// CPP-DEFAULT:       }98 99emitc.func @emitc_double_do() {100  %var_1 = "emitc.variable"() <{value = 0 : i32}> : () -> !emitc.lvalue<i32>101  %var_2 = "emitc.variable"() <{value = 0 : i32}> : () -> !emitc.lvalue<i32>102  103  %step = literal "1" : i32104  %end_1 = literal "3" : i32105  %end_2 = literal "5" : i32106 107  do {108    %var_1_load = load %var_1 : <i32>109    110    do {111      %var_2_load = load %var_2 : <i32>112      verbatim "printf(\"i = %d, j = %d\", {}, {});" args %var_1_load, %var_2_load : i32, i32113      %tmp_add = add %var_2_load, %step : (i32, i32) -> i32114      "emitc.assign"(%var_2, %tmp_add) : (!emitc.lvalue<i32>, i32) -> ()115    } while {116      %r = expression %var_2, %end_2 : (!emitc.lvalue<i32>, i32) -> i1 {117        %var_2_load = load %var_2 : <i32>118        %cmp = cmp le, %var_2_load, %end_2 : (i32, i32) -> i1119        yield %cmp : i1120      }121      122      yield %r : i1123    }124 125    %tmp_add = add %var_1_load, %step : (i32, i32) -> i32126    "emitc.assign"(%var_1, %tmp_add) : (!emitc.lvalue<i32>, i32) -> ()127  } while {128    %r = expression %var_1, %end_1 : (!emitc.lvalue<i32>, i32) -> i1 {129      %var_1_load = load %var_1 : <i32>130      %cmp = cmp le, %var_1_load, %end_1 : (i32, i32) -> i1131      yield %cmp : i1132    }133    134    yield %r : i1135  }136 137  return138}139 140 141// CPP-DEFAULT-LABEL: bool payload_do_with_empty_body(142// CPP-DEFAULT:         int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]]) {143// CPP-DEFAULT:         bool [[VAL_3:v[0-9]+]] = [[VAL_1]] < [[VAL_2]];144// CPP-DEFAULT:         return [[VAL_3]];145// CPP-DEFAULT:       }146// CPP-DEFAULT:       void emitc_do_with_empty_body(147// CPP-DEFAULT:         int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]]) {148// CPP-DEFAULT:         do {149// CPP-DEFAULT:         } while (payload_do_with_empty_body([[VAL_1]], [[VAL_2]]));150// CPP-DEFAULT:         return;151// CPP-DEFAULT:       }152 153emitc.func @payload_do_with_empty_body(%1 : i32, %2 : i32) -> i1 {154  %cmp = emitc.cmp lt, %1, %2 : (i32, i32) -> i1155  return %cmp : i1156}157func.func @emitc_do_with_empty_body(%arg1 : i32, %arg2 : i32) {158  emitc.do {159  } while {160    %r = emitc.expression %arg1, %arg2 : (i32, i32) -> i1 {161      %call = emitc.call @payload_do_with_empty_body(%arg1, %arg2) : (i32, i32) -> i1162      emitc.yield %call : i1163    }164    emitc.yield %r: i1165  }166 167  return168}169