1// RUN: mlir-translate -mlir-to-cpp %s | FileCheck --match-full-lines %s -check-prefix=CPP-DEFAULT 2// RUN: mlir-translate -mlir-to-cpp -declare-variables-at-top %s | FileCheck --match-full-lines %s -check-prefix=CPP-DECLTOP 3 4// CPP-DEFAULT-LABEL: void emitc_switch_ptrdiff_t() { 5// CPP-DEFAULT: ptrdiff_t v1 = 1; 6// CPP-DEFAULT: switch (v1) { 7// CPP-DEFAULT: case 2: { 8// CPP-DEFAULT: int32_t v2 = func_b(); 9// CPP-DEFAULT: break; 10// CPP-DEFAULT: } 11// CPP-DEFAULT: case 5: { 12// CPP-DEFAULT: int32_t v3 = func_a(); 13// CPP-DEFAULT: break; 14// CPP-DEFAULT: } 15// CPP-DEFAULT: default: { 16// CPP-DEFAULT: float v4 = 4.200000000e+01f; 17// CPP-DEFAULT: func2(v4); 18// CPP-DEFAULT: break; 19// CPP-DEFAULT: } 20// CPP-DEFAULT: } 21// CPP-DEFAULT: return; 22// CPP-DEFAULT: } 23 24// CPP-DECLTOP-LABEL: void emitc_switch_ptrdiff_t() { 25// CPP-DECLTOP: ptrdiff_t v1; 26// CPP-DECLTOP: float v2; 27// CPP-DECLTOP: int32_t v3; 28// CPP-DECLTOP: int32_t v4; 29// CPP-DECLTOP: v1 = 1; 30// CPP-DECLTOP: switch (v1) { 31// CPP-DECLTOP: case 2: { 32// CPP-DECLTOP: v3 = func_b(); 33// CPP-DECLTOP: break; 34// CPP-DECLTOP: } 35// CPP-DECLTOP: case 5: { 36// CPP-DECLTOP: v4 = func_a(); 37// CPP-DECLTOP: break; 38// CPP-DECLTOP: } 39// CPP-DECLTOP: default: { 40// CPP-DECLTOP: v2 = 4.200000000e+01f; 41// CPP-DECLTOP: func2(v2); 42// CPP-DECLTOP: break; 43// CPP-DECLTOP: } 44// CPP-DECLTOP: } 45// CPP-DECLTOP: return; 46// CPP-DECLTOP: } 47func.func @emitc_switch_ptrdiff_t() { 48 %0 = "emitc.constant"(){value = 1 : index} : () -> !emitc.ptrdiff_t 49 50 emitc.switch %0 : !emitc.ptrdiff_t 51 case 2 { 52 %1 = emitc.call_opaque "func_b" () : () -> i32 53 emitc.yield 54 } 55 case 5 { 56 %2 = emitc.call_opaque "func_a" () : () -> i32 57 emitc.yield 58 } 59 default { 60 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 61 emitc.call_opaque "func2" (%3) : (f32) -> () 62 } 63 return 64} 65 66// CPP-DEFAULT-LABEL: void emitc_switch_ssize_t() { 67// CPP-DEFAULT: ssize_t v1 = 1; 68// CPP-DEFAULT: switch (v1) { 69// CPP-DEFAULT: case 2: { 70// CPP-DEFAULT: int32_t v2 = func_b(); 71// CPP-DEFAULT: break; 72// CPP-DEFAULT: } 73// CPP-DEFAULT: case 5: { 74// CPP-DEFAULT: int32_t v3 = func_a(); 75// CPP-DEFAULT: break; 76// CPP-DEFAULT: } 77// CPP-DEFAULT: default: { 78// CPP-DEFAULT: float v4 = 4.200000000e+01f; 79// CPP-DEFAULT: func2(v4); 80// CPP-DEFAULT: break; 81// CPP-DEFAULT: } 82// CPP-DEFAULT: } 83// CPP-DEFAULT: return; 84// CPP-DEFAULT: } 85 86// CPP-DECLTOP-LABEL: void emitc_switch_ssize_t() { 87// CPP-DECLTOP: ssize_t v1; 88// CPP-DECLTOP: float v2; 89// CPP-DECLTOP: int32_t v3; 90// CPP-DECLTOP: int32_t v4; 91// CPP-DECLTOP: v1 = 1; 92// CPP-DECLTOP: switch (v1) { 93// CPP-DECLTOP: case 2: { 94// CPP-DECLTOP: v3 = func_b(); 95// CPP-DECLTOP: break; 96// CPP-DECLTOP: } 97// CPP-DECLTOP: case 5: { 98// CPP-DECLTOP: v4 = func_a(); 99// CPP-DECLTOP: break; 100// CPP-DECLTOP: } 101// CPP-DECLTOP: default: { 102// CPP-DECLTOP: v2 = 4.200000000e+01f; 103// CPP-DECLTOP: func2(v2); 104// CPP-DECLTOP: break; 105// CPP-DECLTOP: } 106// CPP-DECLTOP: } 107// CPP-DECLTOP: return; 108// CPP-DECLTOP: } 109func.func @emitc_switch_ssize_t() { 110 %0 = "emitc.constant"(){value = 1 : index} : () -> !emitc.ssize_t 111 112 emitc.switch %0 : !emitc.ssize_t 113 case 2 { 114 %1 = emitc.call_opaque "func_b" () : () -> i32 115 emitc.yield 116 } 117 case 5 { 118 %2 = emitc.call_opaque "func_a" () : () -> i32 119 emitc.yield 120 } 121 default { 122 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 123 emitc.call_opaque "func2" (%3) : (f32) -> () 124 emitc.yield 125 } 126 return 127} 128 129// CPP-DEFAULT-LABEL: void emitc_switch_size_t() { 130// CPP-DEFAULT: size_t v1 = 1; 131// CPP-DEFAULT: switch (v1) { 132// CPP-DEFAULT: case 2: { 133// CPP-DEFAULT: int32_t v2 = func_b(); 134// CPP-DEFAULT: break; 135// CPP-DEFAULT: } 136// CPP-DEFAULT: case 5: { 137// CPP-DEFAULT: int32_t v3 = func_a(); 138// CPP-DEFAULT: break; 139// CPP-DEFAULT: } 140// CPP-DEFAULT: default: { 141// CPP-DEFAULT: float v4 = 4.200000000e+01f; 142// CPP-DEFAULT: func2(v4); 143// CPP-DEFAULT: break; 144// CPP-DEFAULT: } 145// CPP-DEFAULT: } 146// CPP-DEFAULT: return; 147// CPP-DEFAULT: } 148 149// CPP-DECLTOP-LABEL: void emitc_switch_size_t() { 150// CPP-DECLTOP: size_t v1; 151// CPP-DECLTOP: float v2; 152// CPP-DECLTOP: int32_t v3; 153// CPP-DECLTOP: int32_t v4; 154// CPP-DECLTOP: v1 = 1; 155// CPP-DECLTOP: switch (v1) { 156// CPP-DECLTOP: case 2: { 157// CPP-DECLTOP: v3 = func_b(); 158// CPP-DECLTOP: break; 159// CPP-DECLTOP: } 160// CPP-DECLTOP: case 5: { 161// CPP-DECLTOP: v4 = func_a(); 162// CPP-DECLTOP: break; 163// CPP-DECLTOP: } 164// CPP-DECLTOP: default: { 165// CPP-DECLTOP: v2 = 4.200000000e+01f; 166// CPP-DECLTOP: func2(v2); 167// CPP-DECLTOP: break; 168// CPP-DECLTOP: } 169// CPP-DECLTOP: } 170// CPP-DECLTOP: return; 171// CPP-DECLTOP: } 172func.func @emitc_switch_size_t() { 173 %0 = "emitc.constant"(){value = 1 : index} : () -> !emitc.size_t 174 175 emitc.switch %0 : !emitc.size_t 176 case 2 { 177 %1 = emitc.call_opaque "func_b" () : () -> i32 178 emitc.yield 179 } 180 case 5 { 181 %2 = emitc.call_opaque "func_a" () : () -> i32 182 emitc.yield 183 } 184 default { 185 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 186 emitc.call_opaque "func2" (%3) : (f32) -> () 187 emitc.yield 188 } 189 return 190} 191 192// CPP-DEFAULT-LABEL: void emitc_switch_index() { 193// CPP-DEFAULT: size_t v1 = 1; 194// CPP-DEFAULT: switch (v1) { 195// CPP-DEFAULT: case 2: { 196// CPP-DEFAULT: int32_t v2 = func_b(); 197// CPP-DEFAULT: break; 198// CPP-DEFAULT: } 199// CPP-DEFAULT: case 5: { 200// CPP-DEFAULT: int32_t v3 = func_a(); 201// CPP-DEFAULT: break; 202// CPP-DEFAULT: } 203// CPP-DEFAULT: default: { 204// CPP-DEFAULT: float v4 = 4.200000000e+01f; 205// CPP-DEFAULT: func2(v4); 206// CPP-DEFAULT: break; 207// CPP-DEFAULT: } 208// CPP-DEFAULT: } 209// CPP-DEFAULT: return; 210// CPP-DEFAULT: } 211 212// CPP-DECLTOP-LABEL: void emitc_switch_index() { 213// CPP-DECLTOP: size_t v1; 214// CPP-DECLTOP: float v2; 215// CPP-DECLTOP: int32_t v3; 216// CPP-DECLTOP: int32_t v4; 217// CPP-DECLTOP: v1 = 1; 218// CPP-DECLTOP: switch (v1) { 219// CPP-DECLTOP: case 2: { 220// CPP-DECLTOP: v3 = func_b(); 221// CPP-DECLTOP: break; 222// CPP-DECLTOP: } 223// CPP-DECLTOP: case 5: { 224// CPP-DECLTOP: v4 = func_a(); 225// CPP-DECLTOP: break; 226// CPP-DECLTOP: } 227// CPP-DECLTOP: default: { 228// CPP-DECLTOP: v2 = 4.200000000e+01f; 229// CPP-DECLTOP: func2(v2); 230// CPP-DECLTOP: break; 231// CPP-DECLTOP: } 232// CPP-DECLTOP: } 233// CPP-DECLTOP: return; 234// CPP-DECLTOP: } 235func.func @emitc_switch_index() { 236 %0 = "emitc.constant"(){value = 1 : index} : () -> index 237 238 emitc.switch %0 : index 239 case 2 { 240 %1 = emitc.call_opaque "func_b" () : () -> i32 241 emitc.yield 242 } 243 case 5 { 244 %2 = emitc.call_opaque "func_a" () : () -> i32 245 emitc.yield 246 } 247 default { 248 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 249 emitc.call_opaque "func2" (%3) : (f32) -> () 250 emitc.yield 251 } 252 return 253} 254 255// CPP-DEFAULT-LABEL: void emitc_switch_opaque() { 256// CPP-DEFAULT: size_t v1 = 1; 257// CPP-DEFAULT: switch (v1) { 258// CPP-DEFAULT: case 2: { 259// CPP-DEFAULT: int32_t v2 = func_b(); 260// CPP-DEFAULT: break; 261// CPP-DEFAULT: } 262// CPP-DEFAULT: case 5: { 263// CPP-DEFAULT: int32_t v3 = func_a(); 264// CPP-DEFAULT: break; 265// CPP-DEFAULT: } 266// CPP-DEFAULT: default: { 267// CPP-DEFAULT: float v4 = 4.200000000e+01f; 268// CPP-DEFAULT: func2(v4); 269// CPP-DEFAULT: break; 270// CPP-DEFAULT: } 271// CPP-DEFAULT: } 272// CPP-DEFAULT: return; 273// CPP-DEFAULT: } 274 275// CPP-DECLTOP-LABEL: void emitc_switch_opaque() { 276// CPP-DECLTOP: size_t v1; 277// CPP-DECLTOP: float v2; 278// CPP-DECLTOP: int32_t v3; 279// CPP-DECLTOP: int32_t v4; 280// CPP-DECLTOP: v1 = 1; 281// CPP-DECLTOP: switch (v1) { 282// CPP-DECLTOP: case 2: { 283// CPP-DECLTOP: v3 = func_b(); 284// CPP-DECLTOP: break; 285// CPP-DECLTOP: } 286// CPP-DECLTOP: case 5: { 287// CPP-DECLTOP: v4 = func_a(); 288// CPP-DECLTOP: break; 289// CPP-DECLTOP: } 290// CPP-DECLTOP: default: { 291// CPP-DECLTOP: v2 = 4.200000000e+01f; 292// CPP-DECLTOP: func2(v2); 293// CPP-DECLTOP: break; 294// CPP-DECLTOP: } 295// CPP-DECLTOP: } 296// CPP-DECLTOP: return; 297// CPP-DECLTOP: } 298func.func @emitc_switch_opaque() { 299 %0 = "emitc.constant"() {value = #emitc.opaque<"1">} 300 : () -> !emitc.opaque<"size_t"> 301 302 emitc.switch %0 : !emitc.opaque<"size_t"> 303 case 2 { 304 %1 = emitc.call_opaque "func_b" () : () -> i32 305 emitc.yield 306 } 307 case 5 { 308 %2 = emitc.call_opaque "func_a" () : () -> i32 309 emitc.yield 310 } 311 default { 312 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 313 emitc.call_opaque "func2" (%3) : (f32) -> () 314 emitc.yield 315 } 316 return 317} 318 319// CPP-DEFAULT-LABEL: void emitc_switch_i1() { 320// CPP-DEFAULT: bool v1 = true; 321// CPP-DEFAULT: switch (v1) { 322// CPP-DEFAULT: case 2: { 323// CPP-DEFAULT: int32_t v2 = func_b(); 324// CPP-DEFAULT: break; 325// CPP-DEFAULT: } 326// CPP-DEFAULT: case 5: { 327// CPP-DEFAULT: int32_t v3 = func_a(); 328// CPP-DEFAULT: break; 329// CPP-DEFAULT: } 330// CPP-DEFAULT: default: { 331// CPP-DEFAULT: float v4 = 4.200000000e+01f; 332// CPP-DEFAULT: func2(v4); 333// CPP-DEFAULT: break; 334// CPP-DEFAULT: } 335// CPP-DEFAULT: } 336// CPP-DEFAULT: return; 337// CPP-DEFAULT: } 338 339// CPP-DECLTOP-LABEL: void emitc_switch_i1() { 340// CPP-DECLTOP: bool v1; 341// CPP-DECLTOP: float v2; 342// CPP-DECLTOP: int32_t v3; 343// CPP-DECLTOP: int32_t v4; 344// CPP-DECLTOP: v1 = true; 345// CPP-DECLTOP: switch (v1) { 346// CPP-DECLTOP: case 2: { 347// CPP-DECLTOP: v3 = func_b(); 348// CPP-DECLTOP: break; 349// CPP-DECLTOP: } 350// CPP-DECLTOP: case 5: { 351// CPP-DECLTOP: v4 = func_a(); 352// CPP-DECLTOP: break; 353// CPP-DECLTOP: } 354// CPP-DECLTOP: default: { 355// CPP-DECLTOP: v2 = 4.200000000e+01f; 356// CPP-DECLTOP: func2(v2); 357// CPP-DECLTOP: break; 358// CPP-DECLTOP: } 359// CPP-DECLTOP: } 360// CPP-DECLTOP: return; 361// CPP-DECLTOP: } 362func.func @emitc_switch_i1() { 363 %0 = "emitc.constant"(){value = 1 : i1} : () -> i1 364 365 emitc.switch %0 : i1 366 case 2 { 367 %1 = emitc.call_opaque "func_b" () : () -> i32 368 emitc.yield 369 } 370 case 5 { 371 %2 = emitc.call_opaque "func_a" () : () -> i32 372 emitc.yield 373 } 374 default { 375 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 376 emitc.call_opaque "func2" (%3) : (f32) -> () 377 emitc.yield 378 } 379 return 380} 381 382// CPP-DEFAULT-LABEL: void emitc_switch_i8() { 383// CPP-DEFAULT: int8_t v1 = 1; 384// CPP-DEFAULT: switch (v1) { 385// CPP-DEFAULT: case 2: { 386// CPP-DEFAULT: int32_t v2 = func_b(); 387// CPP-DEFAULT: break; 388// CPP-DEFAULT: } 389// CPP-DEFAULT: case 5: { 390// CPP-DEFAULT: int32_t v3 = func_a(); 391// CPP-DEFAULT: break; 392// CPP-DEFAULT: } 393// CPP-DEFAULT: default: { 394// CPP-DEFAULT: float v4 = 4.200000000e+01f; 395// CPP-DEFAULT: func2(v4); 396// CPP-DEFAULT: break; 397// CPP-DEFAULT: } 398// CPP-DEFAULT: } 399// CPP-DEFAULT: return; 400// CPP-DEFAULT: } 401 402// CPP-DECLTOP-LABEL: void emitc_switch_i8() { 403// CPP-DECLTOP: int8_t v1; 404// CPP-DECLTOP: float v2; 405// CPP-DECLTOP: int32_t v3; 406// CPP-DECLTOP: int32_t v4; 407// CPP-DECLTOP: v1 = 1; 408// CPP-DECLTOP: switch (v1) { 409// CPP-DECLTOP: case 2: { 410// CPP-DECLTOP: v3 = func_b(); 411// CPP-DECLTOP: break; 412// CPP-DECLTOP: } 413// CPP-DECLTOP: case 5: { 414// CPP-DECLTOP: v4 = func_a(); 415// CPP-DECLTOP: break; 416// CPP-DECLTOP: } 417// CPP-DECLTOP: default: { 418// CPP-DECLTOP: v2 = 4.200000000e+01f; 419// CPP-DECLTOP: func2(v2); 420// CPP-DECLTOP: break; 421// CPP-DECLTOP: } 422// CPP-DECLTOP: } 423// CPP-DECLTOP: return; 424// CPP-DECLTOP: } 425func.func @emitc_switch_i8() { 426 %0 = "emitc.constant"(){value = 1 : i8} : () -> i8 427 428 emitc.switch %0 : i8 429 case 2 { 430 %1 = emitc.call_opaque "func_b" () : () -> i32 431 emitc.yield 432 } 433 case 5 { 434 %2 = emitc.call_opaque "func_a" () : () -> i32 435 emitc.yield 436 } 437 default { 438 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 439 emitc.call_opaque "func2" (%3) : (f32) -> () 440 emitc.yield 441 } 442 return 443} 444 445// CPP-DEFAULT-LABEL: void emitc_switch_ui8() { 446// CPP-DEFAULT: uint8_t v1 = 1; 447// CPP-DEFAULT: switch (v1) { 448// CPP-DEFAULT: case 2: { 449// CPP-DEFAULT: int32_t v2 = func_b(); 450// CPP-DEFAULT: break; 451// CPP-DEFAULT: } 452// CPP-DEFAULT: case 5: { 453// CPP-DEFAULT: int32_t v3 = func_a(); 454// CPP-DEFAULT: break; 455// CPP-DEFAULT: } 456// CPP-DEFAULT: default: { 457// CPP-DEFAULT: float v4 = 4.200000000e+01f; 458// CPP-DEFAULT: func2(v4); 459// CPP-DEFAULT: break; 460// CPP-DEFAULT: } 461// CPP-DEFAULT: } 462// CPP-DEFAULT: return; 463// CPP-DEFAULT: } 464 465// CPP-DECLTOP-LABEL: void emitc_switch_ui8() { 466// CPP-DECLTOP: uint8_t v1; 467// CPP-DECLTOP: float v2; 468// CPP-DECLTOP: int32_t v3; 469// CPP-DECLTOP: int32_t v4; 470// CPP-DECLTOP: v1 = 1; 471// CPP-DECLTOP: switch (v1) { 472// CPP-DECLTOP: case 2: { 473// CPP-DECLTOP: v3 = func_b(); 474// CPP-DECLTOP: break; 475// CPP-DECLTOP: } 476// CPP-DECLTOP: case 5: { 477// CPP-DECLTOP: v4 = func_a(); 478// CPP-DECLTOP: break; 479// CPP-DECLTOP: } 480// CPP-DECLTOP: default: { 481// CPP-DECLTOP: v2 = 4.200000000e+01f; 482// CPP-DECLTOP: func2(v2); 483// CPP-DECLTOP: break; 484// CPP-DECLTOP: } 485// CPP-DECLTOP: } 486// CPP-DECLTOP: return; 487// CPP-DECLTOP: } 488func.func @emitc_switch_ui8() { 489 %0 = "emitc.constant"(){value = 1 : ui8} : () -> ui8 490 491 emitc.switch %0 : ui8 492 case 2 { 493 %1 = emitc.call_opaque "func_b" () : () -> i32 494 emitc.yield 495 } 496 case 5 { 497 %2 = emitc.call_opaque "func_a" () : () -> i32 498 emitc.yield 499 } 500 default { 501 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 502 emitc.call_opaque "func2" (%3) : (f32) -> () 503 emitc.yield 504 } 505 return 506} 507 508// CPP-DEFAULT-LABEL: void emitc_switch_i16() { 509// CPP-DEFAULT: int16_t v1 = 1; 510// CPP-DEFAULT: switch (v1) { 511// CPP-DEFAULT: case 2: { 512// CPP-DEFAULT: int32_t v2 = func_b(); 513// CPP-DEFAULT: break; 514// CPP-DEFAULT: } 515// CPP-DEFAULT: case 5: { 516// CPP-DEFAULT: int32_t v3 = func_a(); 517// CPP-DEFAULT: break; 518// CPP-DEFAULT: } 519// CPP-DEFAULT: default: { 520// CPP-DEFAULT: float v4 = 4.200000000e+01f; 521// CPP-DEFAULT: func2(v4); 522// CPP-DEFAULT: break; 523// CPP-DEFAULT: } 524// CPP-DEFAULT: } 525// CPP-DEFAULT: return; 526// CPP-DEFAULT: } 527 528// CPP-DECLTOP-LABEL: void emitc_switch_i16() { 529// CPP-DECLTOP: int16_t v1; 530// CPP-DECLTOP: float v2; 531// CPP-DECLTOP: int32_t v3; 532// CPP-DECLTOP: int32_t v4; 533// CPP-DECLTOP: v1 = 1; 534// CPP-DECLTOP: switch (v1) { 535// CPP-DECLTOP: case 2: { 536// CPP-DECLTOP: v3 = func_b(); 537// CPP-DECLTOP: break; 538// CPP-DECLTOP: } 539// CPP-DECLTOP: case 5: { 540// CPP-DECLTOP: v4 = func_a(); 541// CPP-DECLTOP: break; 542// CPP-DECLTOP: } 543// CPP-DECLTOP: default: { 544// CPP-DECLTOP: v2 = 4.200000000e+01f; 545// CPP-DECLTOP: func2(v2); 546// CPP-DECLTOP: break; 547// CPP-DECLTOP: } 548// CPP-DECLTOP: } 549// CPP-DECLTOP: return; 550// CPP-DECLTOP: } 551func.func @emitc_switch_i16() { 552 %0 = "emitc.constant"(){value = 1 : i16} : () -> i16 553 554 emitc.switch %0 : i16 555 case 2 { 556 %1 = emitc.call_opaque "func_b" () : () -> i32 557 emitc.yield 558 } 559 case 5 { 560 %2 = emitc.call_opaque "func_a" () : () -> i32 561 emitc.yield 562 } 563 default { 564 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 565 emitc.call_opaque "func2" (%3) : (f32) -> () 566 emitc.yield 567 } 568 return 569} 570 571// CPP-DEFAULT-LABEL: void emitc_switch_ui16() { 572// CPP-DEFAULT: uint16_t v1 = 1; 573// CPP-DEFAULT: switch (v1) { 574// CPP-DEFAULT: case 2: { 575// CPP-DEFAULT: int32_t v2 = func_b(); 576// CPP-DEFAULT: break; 577// CPP-DEFAULT: } 578// CPP-DEFAULT: case 5: { 579// CPP-DEFAULT: int32_t v3 = func_a(); 580// CPP-DEFAULT: break; 581// CPP-DEFAULT: } 582// CPP-DEFAULT: default: { 583// CPP-DEFAULT: float v4 = 4.200000000e+01f; 584// CPP-DEFAULT: func2(v4); 585// CPP-DEFAULT: break; 586// CPP-DEFAULT: } 587// CPP-DEFAULT: } 588// CPP-DEFAULT: return; 589// CPP-DEFAULT: } 590 591// CPP-DECLTOP-LABEL: void emitc_switch_ui16() { 592// CPP-DECLTOP: uint16_t v1; 593// CPP-DECLTOP: float v2; 594// CPP-DECLTOP: int32_t v3; 595// CPP-DECLTOP: int32_t v4; 596// CPP-DECLTOP: v1 = 1; 597// CPP-DECLTOP: switch (v1) { 598// CPP-DECLTOP: case 2: { 599// CPP-DECLTOP: v3 = func_b(); 600// CPP-DECLTOP: break; 601// CPP-DECLTOP: } 602// CPP-DECLTOP: case 5: { 603// CPP-DECLTOP: v4 = func_a(); 604// CPP-DECLTOP: break; 605// CPP-DECLTOP: } 606// CPP-DECLTOP: default: { 607// CPP-DECLTOP: v2 = 4.200000000e+01f; 608// CPP-DECLTOP: func2(v2); 609// CPP-DECLTOP: break; 610// CPP-DECLTOP: } 611// CPP-DECLTOP: } 612// CPP-DECLTOP: return; 613// CPP-DECLTOP: } 614func.func @emitc_switch_ui16() { 615 %0 = "emitc.constant"(){value = 1 : ui16} : () -> ui16 616 617 emitc.switch %0 : ui16 618 case 2 { 619 %1 = emitc.call_opaque "func_b" () : () -> i32 620 emitc.yield 621 } 622 case 5 { 623 %2 = emitc.call_opaque "func_a" () : () -> i32 624 emitc.yield 625 } 626 default { 627 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 628 emitc.call_opaque "func2" (%3) : (f32) -> () 629 emitc.yield 630 } 631 return 632} 633 634// CPP-DEFAULT-LABEL: void emitc_switch_i32() { 635// CPP-DEFAULT: int32_t v1 = 1; 636// CPP-DEFAULT: switch (v1) { 637// CPP-DEFAULT: case 2: { 638// CPP-DEFAULT: int32_t v2 = func_b(); 639// CPP-DEFAULT: break; 640// CPP-DEFAULT: } 641// CPP-DEFAULT: case 5: { 642// CPP-DEFAULT: int32_t v3 = func_a(); 643// CPP-DEFAULT: break; 644// CPP-DEFAULT: } 645// CPP-DEFAULT: default: { 646// CPP-DEFAULT: float v4 = 4.200000000e+01f; 647// CPP-DEFAULT: func2(v4); 648// CPP-DEFAULT: break; 649// CPP-DEFAULT: } 650// CPP-DEFAULT: } 651// CPP-DEFAULT: return; 652// CPP-DEFAULT: } 653 654// CPP-DECLTOP-LABEL: void emitc_switch_i32() { 655// CPP-DECLTOP: int32_t v1; 656// CPP-DECLTOP: float v2; 657// CPP-DECLTOP: int32_t v3; 658// CPP-DECLTOP: int32_t v4; 659// CPP-DECLTOP: v1 = 1; 660// CPP-DECLTOP: switch (v1) { 661// CPP-DECLTOP: case 2: { 662// CPP-DECLTOP: v3 = func_b(); 663// CPP-DECLTOP: break; 664// CPP-DECLTOP: } 665// CPP-DECLTOP: case 5: { 666// CPP-DECLTOP: v4 = func_a(); 667// CPP-DECLTOP: break; 668// CPP-DECLTOP: } 669// CPP-DECLTOP: default: { 670// CPP-DECLTOP: v2 = 4.200000000e+01f; 671// CPP-DECLTOP: func2(v2); 672// CPP-DECLTOP: break; 673// CPP-DECLTOP: } 674// CPP-DECLTOP: } 675// CPP-DECLTOP: return; 676// CPP-DECLTOP: } 677func.func @emitc_switch_i32() { 678 %0 = "emitc.constant"(){value = 1 : i32} : () -> i32 679 680 emitc.switch %0 : i32 681 case 2 { 682 %1 = emitc.call_opaque "func_b" () : () -> i32 683 emitc.yield 684 } 685 case 5 { 686 %2 = emitc.call_opaque "func_a" () : () -> i32 687 emitc.yield 688 } 689 default { 690 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 691 emitc.call_opaque "func2" (%3) : (f32) -> () 692 emitc.yield 693 } 694 return 695} 696 697// CPP-DEFAULT-LABEL: void emitc_switch_ui32() { 698// CPP-DEFAULT: uint32_t v1 = 1; 699// CPP-DEFAULT: switch (v1) { 700// CPP-DEFAULT: case 2: { 701// CPP-DEFAULT: int32_t v2 = func_b(); 702// CPP-DEFAULT: break; 703// CPP-DEFAULT: } 704// CPP-DEFAULT: case 5: { 705// CPP-DEFAULT: int32_t v3 = func_a(); 706// CPP-DEFAULT: break; 707// CPP-DEFAULT: } 708// CPP-DEFAULT: default: { 709// CPP-DEFAULT: float v4 = 4.200000000e+01f; 710// CPP-DEFAULT: func2(v4); 711// CPP-DEFAULT: break; 712// CPP-DEFAULT: } 713// CPP-DEFAULT: } 714// CPP-DEFAULT: return; 715// CPP-DEFAULT: } 716 717// CPP-DECLTOP-LABEL: void emitc_switch_ui32() { 718// CPP-DECLTOP: uint32_t v1; 719// CPP-DECLTOP: float v2; 720// CPP-DECLTOP: int32_t v3; 721// CPP-DECLTOP: int32_t v4; 722// CPP-DECLTOP: v1 = 1; 723// CPP-DECLTOP: switch (v1) { 724// CPP-DECLTOP: case 2: { 725// CPP-DECLTOP: v3 = func_b(); 726// CPP-DECLTOP: break; 727// CPP-DECLTOP: } 728// CPP-DECLTOP: case 5: { 729// CPP-DECLTOP: v4 = func_a(); 730// CPP-DECLTOP: break; 731// CPP-DECLTOP: } 732// CPP-DECLTOP: default: { 733// CPP-DECLTOP: v2 = 4.200000000e+01f; 734// CPP-DECLTOP: func2(v2); 735// CPP-DECLTOP: break; 736// CPP-DECLTOP: } 737// CPP-DECLTOP: } 738// CPP-DECLTOP: return; 739// CPP-DECLTOP: } 740func.func @emitc_switch_ui32() { 741 %0 = "emitc.constant"(){value = 1 : ui32} : () -> ui32 742 743 emitc.switch %0 : ui32 744 case 2 { 745 %1 = emitc.call_opaque "func_b" () : () -> i32 746 emitc.yield 747 } 748 case 5 { 749 %2 = emitc.call_opaque "func_a" () : () -> i32 750 emitc.yield 751 } 752 default { 753 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 754 emitc.call_opaque "func2" (%3) : (f32) -> () 755 emitc.yield 756 } 757 return 758} 759 760// CPP-DEFAULT-LABEL: void emitc_switch_i64() { 761// CPP-DEFAULT: int64_t v1 = 1; 762// CPP-DEFAULT: switch (v1) { 763// CPP-DEFAULT: case 2: { 764// CPP-DEFAULT: int32_t v2 = func_b(); 765// CPP-DEFAULT: break; 766// CPP-DEFAULT: } 767// CPP-DEFAULT: case 5: { 768// CPP-DEFAULT: int32_t v3 = func_a(); 769// CPP-DEFAULT: break; 770// CPP-DEFAULT: } 771// CPP-DEFAULT: default: { 772// CPP-DEFAULT: float v4 = 4.200000000e+01f; 773// CPP-DEFAULT: func2(v4); 774// CPP-DEFAULT: break; 775// CPP-DEFAULT: } 776// CPP-DEFAULT: } 777// CPP-DEFAULT: return; 778// CPP-DEFAULT: } 779 780// CPP-DECLTOP-LABEL: void emitc_switch_i64() { 781// CPP-DECLTOP: int64_t v1; 782// CPP-DECLTOP: float v2; 783// CPP-DECLTOP: int32_t v3; 784// CPP-DECLTOP: int32_t v4; 785// CPP-DECLTOP: v1 = 1; 786// CPP-DECLTOP: switch (v1) { 787// CPP-DECLTOP: case 2: { 788// CPP-DECLTOP: v3 = func_b(); 789// CPP-DECLTOP: break; 790// CPP-DECLTOP: } 791// CPP-DECLTOP: case 5: { 792// CPP-DECLTOP: v4 = func_a(); 793// CPP-DECLTOP: break; 794// CPP-DECLTOP: } 795// CPP-DECLTOP: default: { 796// CPP-DECLTOP: v2 = 4.200000000e+01f; 797// CPP-DECLTOP: func2(v2); 798// CPP-DECLTOP: break; 799// CPP-DECLTOP: } 800// CPP-DECLTOP: } 801// CPP-DECLTOP: return; 802// CPP-DECLTOP: } 803func.func @emitc_switch_i64() { 804 %0 = "emitc.constant"(){value = 1 : i64} : () -> i64 805 806 emitc.switch %0 : i64 807 case 2 { 808 %1 = emitc.call_opaque "func_b" () : () -> i32 809 emitc.yield 810 } 811 case 5 { 812 %2 = emitc.call_opaque "func_a" () : () -> i32 813 emitc.yield 814 } 815 default { 816 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 817 emitc.call_opaque "func2" (%3) : (f32) -> () 818 emitc.yield 819 } 820 return 821} 822 823// CPP-DEFAULT-LABEL: void emitc_switch_ui64() { 824// CPP-DEFAULT: uint64_t v1 = 1; 825// CPP-DEFAULT: switch (v1) { 826// CPP-DEFAULT: case 2: { 827// CPP-DEFAULT: int32_t v2 = func_b(); 828// CPP-DEFAULT: break; 829// CPP-DEFAULT: } 830// CPP-DEFAULT: case 5: { 831// CPP-DEFAULT: int32_t v3 = func_a(); 832// CPP-DEFAULT: break; 833// CPP-DEFAULT: } 834// CPP-DEFAULT: default: { 835// CPP-DEFAULT: float v4 = 4.200000000e+01f; 836// CPP-DEFAULT: func2(v4); 837// CPP-DEFAULT: break; 838// CPP-DEFAULT: } 839// CPP-DEFAULT: } 840// CPP-DEFAULT: return; 841// CPP-DEFAULT: } 842 843// CPP-DECLTOP-LABEL: void emitc_switch_ui64() { 844// CPP-DECLTOP: uint64_t v1; 845// CPP-DECLTOP: float v2; 846// CPP-DECLTOP: int32_t v3; 847// CPP-DECLTOP: int32_t v4; 848// CPP-DECLTOP: v1 = 1; 849// CPP-DECLTOP: switch (v1) { 850// CPP-DECLTOP: case 2: { 851// CPP-DECLTOP: v3 = func_b(); 852// CPP-DECLTOP: break; 853// CPP-DECLTOP: } 854// CPP-DECLTOP: case 5: { 855// CPP-DECLTOP: v4 = func_a(); 856// CPP-DECLTOP: break; 857// CPP-DECLTOP: } 858// CPP-DECLTOP: default: { 859// CPP-DECLTOP: v2 = 4.200000000e+01f; 860// CPP-DECLTOP: func2(v2); 861// CPP-DECLTOP: break; 862// CPP-DECLTOP: } 863// CPP-DECLTOP: } 864// CPP-DECLTOP: return; 865// CPP-DECLTOP: } 866func.func @emitc_switch_ui64() { 867 %0 = "emitc.constant"(){value = 1 : ui64} : () -> ui64 868 869 emitc.switch %0 : ui64 870 case 2 { 871 %1 = emitc.call_opaque "func_b" () : () -> i32 872 emitc.yield 873 } 874 case 5 { 875 %2 = emitc.call_opaque "func_a" () : () -> i32 876 emitc.yield 877 } 878 default { 879 %3 = "emitc.constant"(){value = 42.0 : f32} : () -> f32 880 emitc.call_opaque "func2" (%3) : (f32) -> () 881 emitc.yield 882 } 883 return 884} 885 886// CPP-DEFAULT-LABEL: void emitc_switch_expression() { 887// CPP-DEFAULT: int64_t v1 = 42; 888// CPP-DEFAULT: switch (-v1) { 889// CPP-DEFAULT: default: { 890// CPP-DEFAULT: break; 891// CPP-DEFAULT: } 892// CPP-DEFAULT: } 893// CPP-DEFAULT: return; 894// CPP-DEFAULT: } 895 896// CPP-DECLTOP-LABEL: void emitc_switch_expression() { 897// CPP-DECLTOP: int64_t v1; 898// CPP-DECLTOP: v1 = 42; 899// CPP-DECLTOP: switch (-v1) { 900// CPP-DECLTOP: default: { 901// CPP-DECLTOP: break; 902// CPP-DECLTOP: } 903// CPP-DECLTOP: } 904// CPP-DECLTOP: return; 905// CPP-DECLTOP: } 906 907func.func @emitc_switch_expression() { 908 %x = "emitc.constant"(){value = 42 : i64} : () -> i64 909 910 %0 = emitc.expression : i64 { 911 %a = emitc.unary_minus %x : (i64) -> i64 912 emitc.yield %a : i64 913 } 914 915 emitc.switch %0 : i64 916 default { 917 emitc.yield 918 } 919 return 920} 921