brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 5e02a7d Raw
343 lines · plain
1; RUN: llc < %s -mtriple=nvptx -mcpu=sm_20 | FileCheck %s2; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_20 | FileCheck %s3; RUN: %if ptxas-ptr32 %{ llc < %s -mtriple=nvptx -mcpu=sm_20 | %ptxas-verify %}4; RUN: %if ptxas %{ llc < %s -mtriple=nvptx64 -mcpu=sm_20 | %ptxas-verify %}5 6;; These tests should run for all targets7 8;;===-- Basic instruction selection tests ---------------------------------===;;9 10 11;;; i6412 13define i64 @add_i64(i64 %a, i64 %b) {14; CHECK: add.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}15; CHECK: ret16  %ret = add i64 %a, %b17  ret i64 %ret18}19 20define i64 @sub_i64(i64 %a, i64 %b) {21; CHECK: sub.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}22; CHECK: ret23  %ret = sub i64 %a, %b24  ret i64 %ret25}26 27define i64 @mul_i64(i64 %a, i64 %b) {28; CHECK: mul.lo.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}29; CHECK: ret30  %ret = mul i64 %a, %b31  ret i64 %ret32}33 34define i64 @umul_lohi_i64(i64 %a) {35; CHECK-LABEL: umul_lohi_i64(36entry:37  %0 = zext i64 %a to i12838  %1 = mul i128 %0, 28839; CHECK: mul.lo.{{u|s}}6440; CHECK: mul.hi.{{u|s}}6441  %2 = lshr i128 %1, 142  %3 = trunc i128 %2 to i6443  ret i64 %344}45 46define i64 @smul_lohi_i64(i64 %a) {47; CHECK-LABEL: smul_lohi_i64(48entry:49  %0 = sext i64 %a to i12850  %1 = mul i128 %0, 28851; CHECK: mul.lo.{{u|s}}6452; CHECK: mul.hi.{{u|s}}6453  %2 = ashr i128 %1, 154  %3 = trunc i128 %2 to i6455  ret i64 %356}57 58define i64 @sdiv_i64(i64 %a, i64 %b) {59; CHECK: div.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}60; CHECK: ret61  %ret = sdiv i64 %a, %b62  ret i64 %ret63}64 65define i64 @udiv_i64(i64 %a, i64 %b) {66; CHECK: div.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}67; CHECK: ret68  %ret = udiv i64 %a, %b69  ret i64 %ret70}71 72define i64 @srem_i64(i64 %a, i64 %b) {73; CHECK: rem.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}74; CHECK: ret75  %ret = srem i64 %a, %b76  ret i64 %ret77}78 79define i64 @urem_i64(i64 %a, i64 %b) {80; CHECK: rem.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}81; CHECK: ret82  %ret = urem i64 %a, %b83  ret i64 %ret84}85 86define i64 @and_i64(i64 %a, i64 %b) {87; CHECK: and.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}88; CHECK: ret89  %ret = and i64 %a, %b90  ret i64 %ret91}92 93define i64 @or_i64(i64 %a, i64 %b) {94; CHECK: or.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}95; CHECK: ret96  %ret = or i64 %a, %b97  ret i64 %ret98}99 100define i64 @xor_i64(i64 %a, i64 %b) {101; CHECK: xor.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}102; CHECK: ret103  %ret = xor i64 %a, %b104  ret i64 %ret105}106 107define i64 @shl_i64(i64 %a, i64 %b) {108; PTX requires 32-bit shift amount109; CHECK: shl.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}110; CHECK: ret111  %ret = shl i64 %a, %b112  ret i64 %ret113}114 115define i64 @ashr_i64(i64 %a, i64 %b) {116; PTX requires 32-bit shift amount117; CHECK: shr.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}118; CHECK: ret119  %ret = ashr i64 %a, %b120  ret i64 %ret121}122 123define i64 @lshr_i64(i64 %a, i64 %b) {124; PTX requires 32-bit shift amount125; CHECK: shr.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}126; CHECK: ret127  %ret = lshr i64 %a, %b128  ret i64 %ret129}130 131 132;;; i32133 134define i32 @add_i32(i32 %a, i32 %b) {135; CHECK: add.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}136; CHECK: ret137  %ret = add i32 %a, %b138  ret i32 %ret139}140 141define i32 @sub_i32(i32 %a, i32 %b) {142; CHECK: sub.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}143; CHECK: ret144  %ret = sub i32 %a, %b145  ret i32 %ret146}147 148define i32 @mul_i32(i32 %a, i32 %b) {149; CHECK: mul.lo.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}150; CHECK: ret151  %ret = mul i32 %a, %b152  ret i32 %ret153}154 155define i32 @sdiv_i32(i32 %a, i32 %b) {156; CHECK: div.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}157; CHECK: ret158  %ret = sdiv i32 %a, %b159  ret i32 %ret160}161 162define i32 @udiv_i32(i32 %a, i32 %b) {163; CHECK: div.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}164; CHECK: ret165  %ret = udiv i32 %a, %b166  ret i32 %ret167}168 169define i32 @srem_i32(i32 %a, i32 %b) {170; CHECK: rem.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}171; CHECK: ret172  %ret = srem i32 %a, %b173  ret i32 %ret174}175 176define i32 @urem_i32(i32 %a, i32 %b) {177; CHECK: rem.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}178; CHECK: ret179  %ret = urem i32 %a, %b180  ret i32 %ret181}182 183define i32 @and_i32(i32 %a, i32 %b) {184; CHECK: and.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}185; CHECK: ret186  %ret = and i32 %a, %b187  ret i32 %ret188}189 190define i32 @or_i32(i32 %a, i32 %b) {191; CHECK: or.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}192; CHECK: ret193  %ret = or i32 %a, %b194  ret i32 %ret195}196 197define i32 @xor_i32(i32 %a, i32 %b) {198; CHECK: xor.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}199; CHECK: ret200  %ret = xor i32 %a, %b201  ret i32 %ret202}203 204define i32 @shl_i32(i32 %a, i32 %b) {205; CHECK: shl.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}206; CHECK: ret207  %ret = shl i32 %a, %b208  ret i32 %ret209}210 211define i32 @ashr_i32(i32 %a, i32 %b) {212; CHECK: shr.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}213; CHECK: ret214  %ret = ashr i32 %a, %b215  ret i32 %ret216}217 218define i32 @lshr_i32(i32 %a, i32 %b) {219; CHECK: shr.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}220; CHECK: ret221  %ret = lshr i32 %a, %b222  ret i32 %ret223}224 225;;; i16226 227define i16 @add_i16(i16 %a, i16 %b) {228; CHECK: add.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}229; CHECK: ret230  %ret = add i16 %a, %b231  ret i16 %ret232}233 234define i16 @sub_i16(i16 %a, i16 %b) {235; CHECK: sub.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}236; CHECK: ret237  %ret = sub i16 %a, %b238  ret i16 %ret239}240 241define i16 @mul_i16(i16 %a, i16 %b) {242; CHECK: mul.lo.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}243; CHECK: ret244  %ret = mul i16 %a, %b245  ret i16 %ret246}247 248define i16 @sdiv_i16(i16 %a, i16 %b) {249; CHECK: div.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}250; CHECK: ret251  %ret = sdiv i16 %a, %b252  ret i16 %ret253}254 255define i16 @udiv_i16(i16 %a, i16 %b) {256; CHECK: div.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}257; CHECK: ret258  %ret = udiv i16 %a, %b259  ret i16 %ret260}261 262define i16 @srem_i16(i16 %a, i16 %b) {263; CHECK: rem.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}264; CHECK: ret265  %ret = srem i16 %a, %b266  ret i16 %ret267}268 269define i16 @urem_i16(i16 %a, i16 %b) {270; CHECK: rem.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}271; CHECK: ret272  %ret = urem i16 %a, %b273  ret i16 %ret274}275 276define i16 @and_i16(i16 %a, i16 %b) {277; CHECK: and.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}278; CHECK: ret279  %ret = and i16 %a, %b280  ret i16 %ret281}282 283define i16 @or_i16(i16 %a, i16 %b) {284; CHECK: or.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}285; CHECK: ret286  %ret = or i16 %a, %b287  ret i16 %ret288}289 290define i16 @xor_i16(i16 %a, i16 %b) {291; CHECK: xor.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}292; CHECK: ret293  %ret = xor i16 %a, %b294  ret i16 %ret295}296 297define i16 @shl_i16(i16 %a, i16 %b) {298; PTX requires 32-bit shift amount299; CHECK: shl.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}300; CHECK: ret301  %ret = shl i16 %a, %b302  ret i16 %ret303}304 305define i16 @ashr_i16(i16 %a, i16 %b) {306; PTX requires 32-bit shift amount307; CHECK: shr.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}308; CHECK: ret309  %ret = ashr i16 %a, %b310  ret i16 %ret311}312 313define i16 @lshr_i16(i16 %a, i16 %b) {314; PTX requires 32-bit shift amount315; CHECK: shr.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}316; CHECK: ret317  %ret = lshr i16 %a, %b318  ret i16 %ret319}320 321;; Immediate cases322 323define i16 @srem_i16_ir(i16 %a) {324; CHECK: rem.s16 %rs{{[0-9]+}}, 12, %rs{{[0-9]+}}325; CHECK: ret326  %ret = srem i16 12, %a327  ret i16 %ret328}329 330define i32 @udiv_i32_ir(i32 %a) {331; CHECK: div.u32 %r{{[0-9]+}}, 34, %r{{[0-9]+}}332; CHECK: ret333  %ret = udiv i32 34, %a334  ret i32 %ret335}336 337define i64 @sub_i64_ir(i64 %a) {338; CHECK: sub.s64 %rd{{[0-9]+}}, 56, %rd{{[0-9]+}}339; CHECK: ret340  %ret = sub i64 56, %a341  ret i64 %ret342}343