Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 1 | ; Test the stackrestore builtin. |
| 2 | ; |
| 3 | ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s |
| 4 | |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 5 | declare i8 *@llvm.stacksave() |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 6 | declare void @llvm.stackrestore(i8 *) |
| 7 | |
| 8 | ; we should use a frame pointer and tear down the frame based on %r11 |
| 9 | ; rather than %r15. |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 10 | define void @f1(i32 %count1, i32 %count2) { |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 11 | ; CHECK-LABEL: f1: |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 12 | ; CHECK: stmg %r11, %r15, 88(%r15) |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 13 | ; CHECK: aghi %r15, -160 |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 14 | ; CHECK: lgr %r11, %r15 |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 15 | ; CHECK: lgr %r15, %r{{[0-5]}} |
| 16 | ; CHECK: lmg %r11, %r15, 248(%r11) |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 17 | ; CHECK: br %r14 |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 18 | %src = call i8 *@llvm.stacksave() |
| 19 | %array1 = alloca i8, i32 %count1 |
| 20 | store volatile i8 0, i8 *%array1 |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 21 | call void @llvm.stackrestore(i8 *%src) |
Richard Sandiford | 36b3769 | 2014-01-13 15:44:44 +0000 | [diff] [blame^] | 22 | %array2 = alloca i8, i32 %count2 |
| 23 | store volatile i8 0, i8 *%array2 |
Ulrich Weigand | 9e3577f | 2013-05-06 16:17:29 +0000 | [diff] [blame] | 24 | ret void |
| 25 | } |