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