160 lines · plain
1; RUN: llc < %s -mtriple=mips64el -mcpu=mips4 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N642; RUN: llc < %s -mtriple=mips64el -mcpu=mips4 -target-abi n32 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N323; RUN: llc < %s -mtriple=mips64el -mcpu=mips64 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N644; RUN: llc < %s -mtriple=mips64el -mcpu=mips64 -target-abi n32 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N325 6@c = common global i8 0, align 47@s = common global i16 0, align 48@i = common global i32 0, align 49@l = common global i64 0, align 810@uc = common global i8 0, align 411@us = common global i16 0, align 412@ui = common global i32 0, align 413@l1 = common global i64 0, align 814 15define i64 @func1() nounwind readonly {16entry:17; CHECK-N64: func118; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(c)19; CHECK-N64: lb ${{[0-9]+}}, 0($[[R0]])20; CHECK-N32: func121; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(c)22; CHECK-N32: lb ${{[0-9]+}}, 0($[[R0]])23 %0 = load i8, ptr @c, align 424 %conv = sext i8 %0 to i6425 ret i64 %conv26}27 28define i64 @func2() nounwind readonly {29entry:30; CHECK-N64: func231; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(s)32; CHECK-N64: lh ${{[0-9]+}}, 0($[[R0]])33; CHECK-N32: func234; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(s)35; CHECK-N32: lh ${{[0-9]+}}, 0($[[R0]])36 %0 = load i16, ptr @s, align 437 %conv = sext i16 %0 to i6438 ret i64 %conv39}40 41define i64 @func3() nounwind readonly {42entry:43; CHECK-N64: func344; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(i)45; CHECK-N64: lw ${{[0-9]+}}, 0($[[R0]])46; CHECK-N32: func347; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(i)48; CHECK-N32: lw ${{[0-9]+}}, 0($[[R0]])49 %0 = load i32, ptr @i, align 450 %conv = sext i32 %0 to i6451 ret i64 %conv52}53 54define i64 @func4() nounwind readonly {55entry:56; CHECK-N64: func457; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(l)58; CHECK-N64: ld ${{[0-9]+}}, 0($[[R0]])59; CHECK-N32: func460; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(l)61; CHECK-N32: ld ${{[0-9]+}}, 0($[[R0]])62 %0 = load i64, ptr @l, align 863 ret i64 %064}65 66define i64 @ufunc1() nounwind readonly {67entry:68; CHECK-N64: ufunc169; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(uc)70; CHECK-N64: lbu ${{[0-9]+}}, 0($[[R0]])71; CHECK-N32: ufunc172; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(uc)73; CHECK-N32: lbu ${{[0-9]+}}, 0($[[R0]])74 %0 = load i8, ptr @uc, align 475 %conv = zext i8 %0 to i6476 ret i64 %conv77}78 79define i64 @ufunc2() nounwind readonly {80entry:81; CHECK-N64: ufunc282; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(us)83; CHECK-N64: lhu ${{[0-9]+}}, 0($[[R0]])84; CHECK-N32: ufunc285; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(us)86; CHECK-N32: lhu ${{[0-9]+}}, 0($[[R0]])87 %0 = load i16, ptr @us, align 488 %conv = zext i16 %0 to i6489 ret i64 %conv90}91 92define i64 @ufunc3() nounwind readonly {93entry:94; CHECK-N64: ufunc395; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(ui)96; CHECK-N64: lwu ${{[0-9]+}}, 0($[[R0]])97; CHECK-N32: ufunc398; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(ui)99; CHECK-N32: lwu ${{[0-9]+}}, 0($[[R0]])100 %0 = load i32, ptr @ui, align 4101 %conv = zext i32 %0 to i64102 ret i64 %conv103}104 105define void @sfunc1() nounwind {106entry:107; CHECK-N64: sfunc1108; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(c)109; CHECK-N64: sb ${{[0-9]+}}, 0($[[R0]])110; CHECK-N32: sfunc1111; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(c)112; CHECK-N32: sb ${{[0-9]+}}, 0($[[R0]])113 %0 = load i64, ptr @l1, align 8114 %conv = trunc i64 %0 to i8115 store i8 %conv, ptr @c, align 4116 ret void117}118 119define void @sfunc2() nounwind {120entry:121; CHECK-N64: sfunc2122; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(s)123; CHECK-N64: sh ${{[0-9]+}}, 0($[[R0]])124; CHECK-N32: sfunc2125; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(s)126; CHECK-N32: sh ${{[0-9]+}}, 0($[[R0]])127 %0 = load i64, ptr @l1, align 8128 %conv = trunc i64 %0 to i16129 store i16 %conv, ptr @s, align 4130 ret void131}132 133define void @sfunc3() nounwind {134entry:135; CHECK-N64: sfunc3136; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(i)137; CHECK-N64: sw ${{[0-9]+}}, 0($[[R0]])138; CHECK-N32: sfunc3139; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(i)140; CHECK-N32: sw ${{[0-9]+}}, 0($[[R0]])141 %0 = load i64, ptr @l1, align 8142 %conv = trunc i64 %0 to i32143 store i32 %conv, ptr @i, align 4144 ret void145}146 147define void @sfunc4() nounwind {148entry:149; CHECK-N64: sfunc4150; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(l)151; CHECK-N64: sd ${{[0-9]+}}, 0($[[R0]])152; CHECK-N32: sfunc4153; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(l)154; CHECK-N32: sd ${{[0-9]+}}, 0($[[R0]])155 %0 = load i64, ptr @l1, align 8156 store i64 %0, ptr @l, align 8157 ret void158}159 160