xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/extload-combine.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon -hexagon-small-data-threshold=0 -disable-hsdr  < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; Check that the combine/stxw instructions are being generated.
3*9880d681SAndroid Build Coastguard Worker; In case of combine one of the operand should be 0 and another should be
4*9880d681SAndroid Build Coastguard Worker; the output of absolute addressing load instruction.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@a = external global i16
7*9880d681SAndroid Build Coastguard Worker@b = external global i16
8*9880d681SAndroid Build Coastguard Worker@c = external global i16
9*9880d681SAndroid Build Coastguard Worker@char_a = external global i8
10*9880d681SAndroid Build Coastguard Worker@char_b = external global i8
11*9880d681SAndroid Build Coastguard Worker@char_c = external global i8
12*9880d681SAndroid Build Coastguard Worker@int_a = external global i32
13*9880d681SAndroid Build Coastguard Worker@int_b = external global i32
14*9880d681SAndroid Build Coastguard Worker@int_c = external global i32
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
17*9880d681SAndroid Build Coastguard Workerdefine i64 @short_test1() #0 {
18*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR:r[0-9]+]]{{ *}}={{ *}}memuh(##
19*9880d681SAndroid Build Coastguard Worker; CHECK: combine(#0, [[VAR]])
20*9880d681SAndroid Build Coastguard Workerentry:
21*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* @a, align 2
22*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @b, align 2
23*9880d681SAndroid Build Coastguard Worker  %conv2 = zext i16 %0 to i64
24*9880d681SAndroid Build Coastguard Worker  ret i64 %conv2
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
28*9880d681SAndroid Build Coastguard Workerdefine i64 @short_test2() #0 {
29*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR1:r[0-9]+]]{{ *}}={{ *}}memh(##
30*9880d681SAndroid Build Coastguard Worker; CHECK: sxtw([[VAR1]])
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* @a, align 2
33*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @c, align 2
34*9880d681SAndroid Build Coastguard Worker  %conv2 = sext i16 %0 to i64
35*9880d681SAndroid Build Coastguard Worker  ret i64 %conv2
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
39*9880d681SAndroid Build Coastguard Workerdefine i64 @char_test1() #0 {
40*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR2:r[0-9]+]]{{ *}}={{ *}}memub(##
41*9880d681SAndroid Build Coastguard Worker; CHECK: combine(#0, [[VAR2]])
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* @char_a, align 1
44*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @char_b, align 1
45*9880d681SAndroid Build Coastguard Worker  %conv2 = zext i8 %0 to i64
46*9880d681SAndroid Build Coastguard Worker  ret i64 %conv2
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
50*9880d681SAndroid Build Coastguard Workerdefine i64 @char_test2() #0 {
51*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR3:r[0-9]+]]{{ *}}={{ *}}memb(##
52*9880d681SAndroid Build Coastguard Worker; CHECK: sxtw([[VAR3]])
53*9880d681SAndroid Build Coastguard Workerentry:
54*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* @char_a, align 1
55*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @char_c, align 1
56*9880d681SAndroid Build Coastguard Worker  %conv2 = sext i8 %0 to i64
57*9880d681SAndroid Build Coastguard Worker  ret i64 %conv2
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
61*9880d681SAndroid Build Coastguard Workerdefine i64 @int_test1() #0 {
62*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR4:r[0-9]+]]{{ *}}={{ *}}memw(##
63*9880d681SAndroid Build Coastguard Worker; CHECK: combine(#0, [[VAR4]])
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @int_a, align 4
66*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @int_b, align 4
67*9880d681SAndroid Build Coastguard Worker  %conv = zext i32 %0 to i64
68*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
72*9880d681SAndroid Build Coastguard Workerdefine i64 @int_test2() #0 {
73*9880d681SAndroid Build Coastguard Worker; CHECK: [[VAR5:r[0-9]+]]{{ *}}={{ *}}memw(##
74*9880d681SAndroid Build Coastguard Worker; CHECK: sxtw([[VAR5]])
75*9880d681SAndroid Build Coastguard Workerentry:
76*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @int_a, align 4
77*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @int_c, align 4
78*9880d681SAndroid Build Coastguard Worker  %conv = sext i32 %0 to i64
79*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
80*9880d681SAndroid Build Coastguard Worker}
81