Tim Northover | 68ae503 | 2014-05-26 17:22:07 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s |
| 2 | %big = type i32 |
| 3 | |
| 4 | @var = global %big 0 |
| 5 | |
| 6 | ; AAPCS: low 8 bits of %in (== w0) will be either 0 or 1. Need to extend to |
| 7 | ; 32-bits. |
| 8 | define void @consume_i1_arg(i1 %in) { |
| 9 | ; CHECK-LABEL: consume_i1_arg: |
| 10 | ; CHECK: and [[BOOL32:w[0-9]+]], w0, #{{0x1|0xff}} |
| 11 | ; CHECK: str [[BOOL32]], [{{x[0-9]+}}, :lo12:var] |
| 12 | %val = zext i1 %in to %big |
| 13 | store %big %val, %big* @var |
| 14 | ret void |
| 15 | } |
| 16 | |
| 17 | ; AAPCS: low 8 bits of %val1 (== w0) will be either 0 or 1. Need to extend to |
| 18 | ; 32-bits (doesn't really matter if it's from 1 or 8 bits). |
| 19 | define void @consume_i1_ret() { |
| 20 | ; CHECK-LABEL: consume_i1_ret: |
| 21 | ; CHECK: bl produce_i1_ret |
| 22 | ; CHECK: and [[BOOL32:w[0-9]+]], w0, #{{0x1|0xff}} |
| 23 | ; CHECK: str [[BOOL32]], [{{x[0-9]+}}, :lo12:var] |
| 24 | %val1 = call i1 @produce_i1_ret() |
| 25 | %val = zext i1 %val1 to %big |
| 26 | store %big %val, %big* @var |
| 27 | ret void |
| 28 | } |
| 29 | |
| 30 | ; AAPCS: low 8 bits of w0 must be either 0 or 1. Need to mask them off. |
| 31 | define i1 @produce_i1_ret() { |
| 32 | ; CHECK-LABEL: produce_i1_ret: |
| 33 | ; CHECK: ldr [[VAR32:w[0-9]+]], [{{x[0-9]+}}, :lo12:var] |
| 34 | ; CHECK: and w0, [[VAR32]], #{{0x1|0xff}} |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 35 | %val = load %big, %big* @var |
Tim Northover | 68ae503 | 2014-05-26 17:22:07 +0000 | [diff] [blame] | 36 | %val1 = trunc %big %val to i1 |
| 37 | ret i1 %val1 |
| 38 | } |
| 39 | |
| 40 | define void @produce_i1_arg() { |
| 41 | ; CHECK-LABEL: produce_i1_arg: |
| 42 | ; CHECK: ldr [[VAR32:w[0-9]+]], [{{x[0-9]+}}, :lo12:var] |
| 43 | ; CHECK: and w0, [[VAR32]], #{{0x1|0xff}} |
| 44 | ; CHECK: bl consume_i1_arg |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 45 | %val = load %big, %big* @var |
Tim Northover | 68ae503 | 2014-05-26 17:22:07 +0000 | [diff] [blame] | 46 | %val1 = trunc %big %val to i1 |
| 47 | call void @consume_i1_arg(i1 %val1) |
| 48 | ret void |
| 49 | } |
| 50 | |
| 51 | |
| 52 | ;define zeroext i1 @foo(i8 %in) { |
| 53 | ; %val = trunc i8 %in to i1 |
| 54 | ; ret i1 %val |
| 55 | ;} |