196 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 3@bufi8 = global [3 x i8] zeroinitializer, align 14@bufi16 = global [3 x i16] zeroinitializer, align 25@bufi32 = global [3 x i32] zeroinitializer, align 46@bufi64 = global [3 x i64] zeroinitializer, align 87@bufi128 = global [3 x i128] zeroinitializer, align 168@buff32 = global [3 x float] zeroinitializer, align 49@buff64 = global [3 x double] zeroinitializer, align 810@buff128 = global [3 x fp128] zeroinitializer, align 1611 12; Function Attrs: noinline nounwind optnone13define signext i8 @loadi8s() {14; CHECK-LABEL: loadi8s:15; CHECK: # %bb.0: # %entry16; CHECK-NEXT: lea %s0, bufi8@lo17; CHECK-NEXT: and %s0, %s0, (32)018; CHECK-NEXT: lea.sl %s0, bufi8@hi(, %s0)19; CHECK-NEXT: ld1b.sx %s0, 2(, %s0)20; CHECK-NEXT: b.l.t (, %s10)21entry:22 %0 = load i8, ptr getelementptr inbounds ([3 x i8], ptr @bufi8, i64 0, i64 2), align 123 ret i8 %024}25 26; Function Attrs: noinline nounwind optnone27define signext i16 @loadi16s() {28; CHECK-LABEL: loadi16s:29; CHECK: # %bb.0: # %entry30; CHECK-NEXT: lea %s0, bufi16@lo31; CHECK-NEXT: and %s0, %s0, (32)032; CHECK-NEXT: lea.sl %s0, bufi16@hi(, %s0)33; CHECK-NEXT: ld2b.sx %s0, 4(, %s0)34; CHECK-NEXT: b.l.t (, %s10)35entry:36 %0 = load i16, ptr getelementptr inbounds ([3 x i16], ptr @bufi16, i64 0, i64 2), align 237 ret i16 %038}39 40; Function Attrs: noinline nounwind optnone41define signext i32 @loadi32s() {42; CHECK-LABEL: loadi32s:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: lea %s0, bufi32@lo45; CHECK-NEXT: and %s0, %s0, (32)046; CHECK-NEXT: lea.sl %s0, bufi32@hi(, %s0)47; CHECK-NEXT: ldl.sx %s0, 8(, %s0)48; CHECK-NEXT: b.l.t (, %s10)49entry:50 %0 = load i32, ptr getelementptr inbounds ([3 x i32], ptr @bufi32, i64 0, i64 2), align 451 ret i32 %052}53 54; Function Attrs: noinline nounwind optnone55define i64 @loadi64s() {56; CHECK-LABEL: loadi64s:57; CHECK: # %bb.0: # %entry58; CHECK-NEXT: lea %s0, bufi64@lo59; CHECK-NEXT: and %s0, %s0, (32)060; CHECK-NEXT: lea.sl %s0, bufi64@hi(, %s0)61; CHECK-NEXT: ld %s0, 16(, %s0)62; CHECK-NEXT: b.l.t (, %s10)63entry:64 %0 = load i64, ptr getelementptr inbounds ([3 x i64], ptr @bufi64, i64 0, i64 2), align 865 ret i64 %066}67 68; Function Attrs: noinline nounwind optnone69define i128 @loadi128s() {70; CHECK-LABEL: loadi128s:71; CHECK: # %bb.0: # %entry72; CHECK-NEXT: lea %s0, bufi128@lo73; CHECK-NEXT: and %s0, %s0, (32)074; CHECK-NEXT: lea.sl %s1, bufi128@hi(, %s0)75; CHECK-NEXT: ld %s0, 32(, %s1)76; CHECK-NEXT: ld %s1, 40(, %s1)77; CHECK-NEXT: b.l.t (, %s10)78entry:79 %0 = load i128, ptr getelementptr inbounds ([3 x i128], ptr @bufi128, i64 0, i64 2), align 1680 ret i128 %081}82 83; Function Attrs: noinline nounwind optnone84define zeroext i8 @loadi8z() {85; CHECK-LABEL: loadi8z:86; CHECK: # %bb.0: # %entry87; CHECK-NEXT: lea %s0, bufi8@lo88; CHECK-NEXT: and %s0, %s0, (32)089; CHECK-NEXT: lea.sl %s0, bufi8@hi(, %s0)90; CHECK-NEXT: ld1b.zx %s0, 2(, %s0)91; CHECK-NEXT: b.l.t (, %s10)92entry:93 %0 = load i8, ptr getelementptr inbounds ([3 x i8], ptr @bufi8, i64 0, i64 2), align 194 ret i8 %095}96 97; Function Attrs: noinline nounwind optnone98define zeroext i16 @loadi16z() {99; CHECK-LABEL: loadi16z:100; CHECK: # %bb.0: # %entry101; CHECK-NEXT: lea %s0, bufi16@lo102; CHECK-NEXT: and %s0, %s0, (32)0103; CHECK-NEXT: lea.sl %s0, bufi16@hi(, %s0)104; CHECK-NEXT: ld2b.zx %s0, 4(, %s0)105; CHECK-NEXT: b.l.t (, %s10)106entry:107 %0 = load i16, ptr getelementptr inbounds ([3 x i16], ptr @bufi16, i64 0, i64 2), align 2108 ret i16 %0109}110 111; Function Attrs: noinline nounwind optnone112define zeroext i32 @loadi32z() {113; CHECK-LABEL: loadi32z:114; CHECK: # %bb.0: # %entry115; CHECK-NEXT: lea %s0, bufi32@lo116; CHECK-NEXT: and %s0, %s0, (32)0117; CHECK-NEXT: lea.sl %s0, bufi32@hi(, %s0)118; CHECK-NEXT: ldl.zx %s0, 8(, %s0)119; CHECK-NEXT: b.l.t (, %s10)120entry:121 %0 = load i32, ptr getelementptr inbounds ([3 x i32], ptr @bufi32, i64 0, i64 2), align 4122 ret i32 %0123}124 125; Function Attrs: noinline nounwind optnone126define i64 @loadi64z() {127; CHECK-LABEL: loadi64z:128; CHECK: # %bb.0: # %entry129; CHECK-NEXT: lea %s0, bufi64@lo130; CHECK-NEXT: and %s0, %s0, (32)0131; CHECK-NEXT: lea.sl %s0, bufi64@hi(, %s0)132; CHECK-NEXT: ld %s0, 16(, %s0)133; CHECK-NEXT: b.l.t (, %s10)134entry:135 %0 = load i64, ptr getelementptr inbounds ([3 x i64], ptr @bufi64, i64 0, i64 2), align 8136 ret i64 %0137}138 139; Function Attrs: noinline nounwind optnone140define i128 @loadi128z() {141; CHECK-LABEL: loadi128z:142; CHECK: # %bb.0: # %entry143; CHECK-NEXT: lea %s0, bufi128@lo144; CHECK-NEXT: and %s0, %s0, (32)0145; CHECK-NEXT: lea.sl %s1, bufi128@hi(, %s0)146; CHECK-NEXT: ld %s0, 32(, %s1)147; CHECK-NEXT: ld %s1, 40(, %s1)148; CHECK-NEXT: b.l.t (, %s10)149entry:150 %0 = load i128, ptr getelementptr inbounds ([3 x i128], ptr @bufi128, i64 0, i64 2), align 16151 ret i128 %0152}153 154; Function Attrs: noinline nounwind optnone155define float @loadf32() {156; CHECK-LABEL: loadf32:157; CHECK: # %bb.0: # %entry158; CHECK-NEXT: lea %s0, buff32@lo159; CHECK-NEXT: and %s0, %s0, (32)0160; CHECK-NEXT: lea.sl %s0, buff32@hi(, %s0)161; CHECK-NEXT: ldu %s0, 8(, %s0)162; CHECK-NEXT: b.l.t (, %s10)163entry:164 %0 = load float, ptr getelementptr inbounds ([3 x float], ptr @buff32, i64 0, i64 2), align 4165 ret float %0166}167 168; Function Attrs: noinline nounwind optnone169define double @loadf64() {170; CHECK-LABEL: loadf64:171; CHECK: # %bb.0: # %entry172; CHECK-NEXT: lea %s0, buff64@lo173; CHECK-NEXT: and %s0, %s0, (32)0174; CHECK-NEXT: lea.sl %s0, buff64@hi(, %s0)175; CHECK-NEXT: ld %s0, 16(, %s0)176; CHECK-NEXT: b.l.t (, %s10)177entry:178 %0 = load double, ptr getelementptr inbounds ([3 x double], ptr @buff64, i64 0, i64 2), align 8179 ret double %0180}181 182; Function Attrs: noinline nounwind optnone183define fp128 @loadf128() {184; CHECK-LABEL: loadf128:185; CHECK: # %bb.0: # %entry186; CHECK-NEXT: lea %s0, buff128@lo187; CHECK-NEXT: and %s0, %s0, (32)0188; CHECK-NEXT: lea.sl %s2, buff128@hi(, %s0)189; CHECK-NEXT: ld %s0, 40(, %s2)190; CHECK-NEXT: ld %s1, 32(, %s2)191; CHECK-NEXT: b.l.t (, %s10)192entry:193 %0 = load fp128, ptr getelementptr inbounds ([3 x fp128], ptr @buff128, i64 0, i64 2), align 16194 ret fp128 %0195}196