| // RUN: mlir-opt -convert-memref-to-llvm %s | FileCheck %s |
| |
| // CHECK-LABEL: @empty |
| func @empty() { |
| // CHECK: llvm.intr.stacksave |
| // CHECK: llvm.br |
| memref.alloca_scope { |
| memref.alloca_scope.return |
| } |
| // CHECK: llvm.intr.stackrestore |
| // CHECK: llvm.br |
| return |
| } |
| |
| // CHECK-LABEL: @returns_nothing |
| func @returns_nothing(%b: f32) { |
| %a = arith.constant 10.0 : f32 |
| // CHECK: llvm.intr.stacksave |
| memref.alloca_scope { |
| %c = arith.addf %a, %b : f32 |
| memref.alloca_scope.return |
| } |
| // CHECK: llvm.intr.stackrestore |
| return |
| } |
| |
| // CHECK-LABEL: @returns_one_value |
| func @returns_one_value(%b: f32) -> f32 { |
| %a = arith.constant 10.0 : f32 |
| // CHECK: llvm.intr.stacksave |
| %result = memref.alloca_scope -> f32 { |
| %c = arith.addf %a, %b : f32 |
| memref.alloca_scope.return %c: f32 |
| } |
| // CHECK: llvm.intr.stackrestore |
| return %result : f32 |
| } |
| |
| // CHECK-LABEL: @returns_multiple_values |
| func @returns_multiple_values(%b: f32) -> f32 { |
| %a = arith.constant 10.0 : f32 |
| // CHECK: llvm.intr.stacksave |
| %result1, %result2 = memref.alloca_scope -> (f32, f32) { |
| %c = arith.addf %a, %b : f32 |
| %d = arith.subf %a, %b : f32 |
| memref.alloca_scope.return %c, %d: f32, f32 |
| } |
| // CHECK: llvm.intr.stackrestore |
| %result = arith.addf %result1, %result2 : f32 |
| return %result : f32 |
| } |