xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/bool-loads.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@var = global i1 0
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sextloadi32() {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sextloadi32
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker  %val = load i1, i1* @var
9*9880d681SAndroid Build Coastguard Worker  %ret = sext i1 %val to i32
10*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var]
11*9880d681SAndroid Build Coastguard Worker; CHECK: {{sbfx x[0-9]+, x[0-9]+, #0, #1|sbfx w[0-9]+, w[0-9]+, #0, #1}}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker  ret i32 %ret
14*9880d681SAndroid Build Coastguard Worker; CHECK: ret
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine i64 @test_sextloadi64() {
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sextloadi64
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker  %val = load i1, i1* @var
21*9880d681SAndroid Build Coastguard Worker  %ret = sext i1 %val to i64
22*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var]
23*9880d681SAndroid Build Coastguard Worker; CHECK: {{sbfx x[0-9]+, x[0-9]+, #0, #1}}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
26*9880d681SAndroid Build Coastguard Worker; CHECK: ret
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdefine i32 @test_zextloadi32() {
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_zextloadi32
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; It's not actually necessary that "ret" is next, but as far as LLVM
33*9880d681SAndroid Build Coastguard Worker; is concerned only 0 or 1 should be loadable so no extension is
34*9880d681SAndroid Build Coastguard Worker; necessary.
35*9880d681SAndroid Build Coastguard Worker  %val = load i1, i1* @var
36*9880d681SAndroid Build Coastguard Worker  %ret = zext i1 %val to i32
37*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var]
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker  ret i32 %ret
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine i64 @test_zextloadi64() {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_zextloadi64
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker; It's not actually necessary that "ret" is next, but as far as LLVM
47*9880d681SAndroid Build Coastguard Worker; is concerned only 0 or 1 should be loadable so no extension is
48*9880d681SAndroid Build Coastguard Worker; necessary.
49*9880d681SAndroid Build Coastguard Worker  %val = load i1, i1* @var
50*9880d681SAndroid Build Coastguard Worker  %ret = zext i1 %val to i64
51*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var]
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
55*9880d681SAndroid Build Coastguard Worker}
56