1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; Check that we generate load instruction with (base + register offset << x) 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; load word 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @load_w(i32* nocapture %a, i32 %n, i32 %m) nounwind { 7*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}{{ *}}={{ *}}memw(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<{{ *}}#2) 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 10*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i32, i32* %a, i32 %tmp 11*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %scevgep9, align 4 12*9880d681SAndroid Build Coastguard Worker ret i32 %val 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; load unsigned half word 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine i16 @load_uh(i16* nocapture %a, i32 %n, i32 %m) nounwind { 18*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}{{ *}}={{ *}}memuh(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<#1) 19*9880d681SAndroid Build Coastguard Workerentry: 20*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 21*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i16, i16* %a, i32 %tmp 22*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %scevgep9, align 2 23*9880d681SAndroid Build Coastguard Worker ret i16 %val 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; load signed half word 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i32 @load_h(i16* nocapture %a, i32 %n, i32 %m) nounwind { 29*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}{{ *}}={{ *}}memh(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<#1) 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 32*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i16, i16* %a, i32 %tmp 33*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %scevgep9, align 2 34*9880d681SAndroid Build Coastguard Worker %conv = sext i16 %val to i32 35*9880d681SAndroid Build Coastguard Worker ret i32 %conv 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; load unsigned byte 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine i8 @load_ub(i8* nocapture %a, i32 %n, i32 %m) nounwind { 41*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}{{ *}}={{ *}}memub(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<#0) 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 44*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i8, i8* %a, i32 %tmp 45*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %scevgep9, align 1 46*9880d681SAndroid Build Coastguard Worker ret i8 %val 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; load signed byte 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine i32 @foo_2(i8* nocapture %a, i32 %n, i32 %m) nounwind { 52*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}{{ *}}={{ *}}memb(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<{{ *}}#0) 53*9880d681SAndroid Build Coastguard Workerentry: 54*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 55*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i8, i8* %a, i32 %tmp 56*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %scevgep9, align 1 57*9880d681SAndroid Build Coastguard Worker %conv = sext i8 %val to i32 58*9880d681SAndroid Build Coastguard Worker ret i32 %conv 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; load doubleword 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine i64 @load_d(i64* nocapture %a, i32 %n, i32 %m) nounwind { 64*9880d681SAndroid Build Coastguard Worker; CHECK: r{{[0-9]+}}:{{[0-9]+}}{{ *}}={{ *}}memd(r{{[0-9]+}}{{ *}}+{{ *}}r{{[0-9]+}}{{ *}}<<{{ *}}#3) 65*9880d681SAndroid Build Coastguard Workerentry: 66*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %n, %m 67*9880d681SAndroid Build Coastguard Worker %scevgep9 = getelementptr i64, i64* %a, i32 %tmp 68*9880d681SAndroid Build Coastguard Worker %val = load i64, i64* %scevgep9, align 8 69*9880d681SAndroid Build Coastguard Worker ret i64 %val 70*9880d681SAndroid Build Coastguard Worker} 71