brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 756fc54 Raw
218 lines · plain
1// RUN: mlir-opt -convert-spirv-to-llvm -split-input-file -verify-diagnostics %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// spirv.Branch5//===----------------------------------------------------------------------===//6 7spirv.module Logical GLSL450 {8  spirv.func @branch_without_arguments() -> () "None" {9	  // CHECK: llvm.br ^bb110    spirv.Branch ^label11  // CHECK: ^bb112  ^label:13    spirv.Return14  }15 16  spirv.func @branch_with_arguments() -> () "None" {17    %0 = spirv.Constant 0 : i3218    %1 = spirv.Constant true19    // CHECK: llvm.br ^bb1(%{{.*}}, %{{.*}} : i32, i1)20    spirv.Branch ^label(%0, %1: i32, i1)21  // CHECK: ^bb1(%{{.*}}: i32, %{{.*}}: i1)22  ^label(%arg0: i32, %arg1: i1):23    spirv.Return24  }25}26 27// -----28 29//===----------------------------------------------------------------------===//30// spirv.BranchConditional31//===----------------------------------------------------------------------===//32 33spirv.module Logical GLSL450 {34  spirv.func @cond_branch_without_arguments() -> () "None" {35    // CHECK: %[[COND:.*]] = llvm.mlir.constant(true) : i136    %cond = spirv.Constant true37    // CHECK: lvm.cond_br %[[COND]], ^bb1, ^bb238    spirv.BranchConditional %cond, ^true, ^false39    // CHECK: ^bb1:40  ^true:41    spirv.Return42    // CHECK: ^bb2:43  ^false:44    spirv.Return45  }46 47  spirv.func @cond_branch_with_arguments_nested() -> () "None" {48    // CHECK: %[[COND1:.*]] = llvm.mlir.constant(true) : i149    %cond = spirv.Constant true50    %0 = spirv.Constant 0 : i3251    // CHECK: %[[COND2:.*]] = llvm.mlir.constant(false) : i152    %false = spirv.Constant false53    // CHECK: llvm.cond_br %[[COND1]], ^bb1(%{{.*}}, %[[COND2]] : i32, i1), ^bb254    spirv.BranchConditional %cond, ^outer_true(%0, %false: i32, i1), ^outer_false55  // CHECK: ^bb1(%{{.*}}: i32, %[[COND:.*]]: i1):56  ^outer_true(%arg0: i32, %arg1: i1):57    // CHECK: llvm.cond_br %[[COND]], ^bb3, ^bb4(%{{.*}}, %{{.*}} : i32, i32)58    spirv.BranchConditional %arg1, ^inner_true, ^inner_false(%arg0, %arg0: i32, i32)59  // CHECK: ^bb2:60  ^outer_false:61    spirv.Return62  // CHECK: ^bb3:63  ^inner_true:64    spirv.Return65  // CHECK: ^bb4(%{{.*}}: i32, %{{.*}}: i32):66  ^inner_false(%arg3: i32, %arg4: i32):67    spirv.Return68  }69 70  spirv.func @cond_branch_with_weights(%cond: i1) -> () "None" {71    // CHECK: llvm.cond_br %{{.*}} weights([1, 2]), ^bb1, ^bb272    spirv.BranchConditional %cond [1, 2], ^true, ^false73  // CHECK: ^bb1:74  ^true:75    spirv.Return76  // CHECK: ^bb2:77  ^false:78    spirv.Return79  }80}81 82// -----83 84//===----------------------------------------------------------------------===//85// spirv.mlir.loop86//===----------------------------------------------------------------------===//87 88spirv.module Logical GLSL450 {89  // CHECK-LABEL: @empty_loop90  spirv.func @empty_loop() "None" {91    // CHECK: llvm.return92    spirv.mlir.loop {93    }94    spirv.Return95  }96 97  // CHECK-LABEL: @infinite_loop98  spirv.func @infinite_loop(%count : i32) -> () "None" {99    // CHECK:   llvm.br ^[[BB1:.*]]100    // CHECK: ^[[BB1]]:101    // CHECK:   %[[COND:.*]] = llvm.mlir.constant(true) : i1102    // CHECK:   llvm.cond_br %[[COND]], ^[[BB2:.*]], ^[[BB4:.*]]103    // CHECK: ^[[BB2]]:104    // CHECK:   llvm.br ^[[BB3:.*]]105    // CHECK: ^[[BB3]]:106    // CHECK:   llvm.br ^[[BB1:.*]]107    // CHECK: ^[[BB4]]:108    // CHECK:   llvm.br ^[[BB5:.*]]109    // CHECK: ^[[BB5]]:110    // CHECK:   llvm.return111    spirv.mlir.loop {112      spirv.Branch ^header113    ^header:114      %cond = spirv.Constant true115      spirv.BranchConditional %cond, ^body, ^merge116    ^body:117      // Do nothing118      spirv.Branch ^continue119    ^continue:120      // Do nothing121      spirv.Branch ^header122    ^merge:123      spirv.mlir.merge124    }125    spirv.Return126  }127}128 129// -----130 131//===----------------------------------------------------------------------===//132// spirv.mlir.selection133//===----------------------------------------------------------------------===//134 135spirv.module Logical GLSL450 {136  spirv.func @selection_empty() -> () "None" {137    // CHECK: llvm.return138    spirv.mlir.selection {139    }140    spirv.Return141  }142 143  spirv.func @selection_with_merge_block_only() -> () "None" {144    %cond = spirv.Constant true145    // CHECK: llvm.return146    spirv.mlir.selection {147      spirv.BranchConditional %cond, ^merge, ^merge148    ^merge:149      spirv.mlir.merge150    }151    spirv.Return152  }153 154  spirv.func @selection_with_true_block_only() -> () "None" {155    // CHECK: %[[COND:.*]] = llvm.mlir.constant(true) : i1156    %cond = spirv.Constant true157    // CHECK: llvm.cond_br %[[COND]], ^bb1, ^bb2158    spirv.mlir.selection {159      spirv.BranchConditional %cond, ^true, ^merge160    // CHECK: ^bb1:161    ^true:162    // CHECK: llvm.br ^bb2163      spirv.Branch ^merge164    // CHECK: ^bb2:165    ^merge:166      // CHECK: llvm.br ^bb3167      spirv.mlir.merge168    }169    // CHECK: ^bb3:170    // CHECK-NEXT: llvm.return171    spirv.Return172  }173 174  spirv.func @selection_with_both_true_and_false_block() -> () "None" {175    // CHECK: %[[COND:.*]] = llvm.mlir.constant(true) : i1176    %cond = spirv.Constant true177    // CHECK: llvm.cond_br %[[COND]], ^bb1, ^bb2178    spirv.mlir.selection {179      spirv.BranchConditional %cond, ^true, ^false180    // CHECK: ^bb1:181    ^true:182    // CHECK: llvm.br ^bb3183      spirv.Branch ^merge184    // CHECK: ^bb2:185    ^false:186    // CHECK: llvm.br ^bb3187      spirv.Branch ^merge188    // CHECK: ^bb3:189    ^merge:190      // CHECK: llvm.br ^bb4191      spirv.mlir.merge192    }193    // CHECK: ^bb4:194    // CHECK-NEXT: llvm.return195    spirv.Return196  }197 198  spirv.func @selection_with_early_return(%arg0: i1) -> i32 "None" {199    // CHECK: %[[ZERO:.*]] = llvm.mlir.constant(0 : i32) : i32200    %0 = spirv.Constant 0 : i32201    // CHECK: llvm.cond_br %{{.*}}, ^bb1(%[[ZERO]] : i32), ^bb2202    spirv.mlir.selection {203      spirv.BranchConditional %arg0, ^true(%0 : i32), ^merge204    // CHECK: ^bb1(%[[ARG:.*]]: i32):205    ^true(%arg1: i32):206      // CHECK: llvm.return %[[ARG]] : i32207      spirv.ReturnValue %arg1 : i32208    // CHECK: ^bb2:209    ^merge:210      // CHECK: llvm.br ^bb3211      spirv.mlir.merge212    }213    // CHECK: ^bb3:214    %one = spirv.Constant 1 : i32215    spirv.ReturnValue %one : i32216  }217}218