160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5;; Exercise the 'shl' LLVM IR: https://llvm.org/docs/LangRef.html#shl-instruction6 7define i1 @shl_i1(i1 %x, i1 %y) {8; LA32-LABEL: shl_i1:9; LA32: # %bb.0:10; LA32-NEXT: ret11;12; LA64-LABEL: shl_i1:13; LA64: # %bb.0:14; LA64-NEXT: ret15 %shl = shl i1 %x, %y16 ret i1 %shl17}18 19define i8 @shl_i8(i8 %x, i8 %y) {20; LA32-LABEL: shl_i8:21; LA32: # %bb.0:22; LA32-NEXT: sll.w $a0, $a0, $a123; LA32-NEXT: ret24;25; LA64-LABEL: shl_i8:26; LA64: # %bb.0:27; LA64-NEXT: sll.d $a0, $a0, $a128; LA64-NEXT: ret29 %shl = shl i8 %x, %y30 ret i8 %shl31}32 33define i16 @shl_i16(i16 %x, i16 %y) {34; LA32-LABEL: shl_i16:35; LA32: # %bb.0:36; LA32-NEXT: sll.w $a0, $a0, $a137; LA32-NEXT: ret38;39; LA64-LABEL: shl_i16:40; LA64: # %bb.0:41; LA64-NEXT: sll.d $a0, $a0, $a142; LA64-NEXT: ret43 %shl = shl i16 %x, %y44 ret i16 %shl45}46 47define i32 @shl_i32(i32 %x, i32 %y) {48; LA32-LABEL: shl_i32:49; LA32: # %bb.0:50; LA32-NEXT: sll.w $a0, $a0, $a151; LA32-NEXT: ret52;53; LA64-LABEL: shl_i32:54; LA64: # %bb.0:55; LA64-NEXT: sll.w $a0, $a0, $a156; LA64-NEXT: ret57 %shl = shl i32 %x, %y58 ret i32 %shl59}60 61define i64 @shl_i64(i64 %x, i64 %y) {62; LA32-LABEL: shl_i64:63; LA32: # %bb.0:64; LA32-NEXT: addi.w $a3, $a2, -3265; LA32-NEXT: bltz $a3, .LBB4_266; LA32-NEXT: # %bb.1:67; LA32-NEXT: sll.w $a1, $a0, $a368; LA32-NEXT: b .LBB4_369; LA32-NEXT: .LBB4_2:70; LA32-NEXT: sll.w $a1, $a1, $a271; LA32-NEXT: xori $a4, $a2, 3172; LA32-NEXT: srli.w $a5, $a0, 173; LA32-NEXT: srl.w $a4, $a5, $a474; LA32-NEXT: or $a1, $a1, $a475; LA32-NEXT: .LBB4_3:76; LA32-NEXT: slti $a3, $a3, 077; LA32-NEXT: sub.w $a3, $zero, $a378; LA32-NEXT: sll.w $a0, $a0, $a279; LA32-NEXT: and $a0, $a3, $a080; LA32-NEXT: ret81;82; LA64-LABEL: shl_i64:83; LA64: # %bb.0:84; LA64-NEXT: sll.d $a0, $a0, $a185; LA64-NEXT: ret86 %shl = shl i64 %x, %y87 ret i64 %shl88}89 90define i1 @shl_i1_3(i1 %x) {91; LA32-LABEL: shl_i1_3:92; LA32: # %bb.0:93; LA32-NEXT: ret94;95; LA64-LABEL: shl_i1_3:96; LA64: # %bb.0:97; LA64-NEXT: ret98 %shl = shl i1 %x, 399 ret i1 %shl100}101 102define i8 @shl_i8_3(i8 %x) {103; LA32-LABEL: shl_i8_3:104; LA32: # %bb.0:105; LA32-NEXT: slli.w $a0, $a0, 3106; LA32-NEXT: ret107;108; LA64-LABEL: shl_i8_3:109; LA64: # %bb.0:110; LA64-NEXT: slli.d $a0, $a0, 3111; LA64-NEXT: ret112 %shl = shl i8 %x, 3113 ret i8 %shl114}115 116define i16 @shl_i16_3(i16 %x) {117; LA32-LABEL: shl_i16_3:118; LA32: # %bb.0:119; LA32-NEXT: slli.w $a0, $a0, 3120; LA32-NEXT: ret121;122; LA64-LABEL: shl_i16_3:123; LA64: # %bb.0:124; LA64-NEXT: slli.d $a0, $a0, 3125; LA64-NEXT: ret126 %shl = shl i16 %x, 3127 ret i16 %shl128}129 130define i32 @shl_i32_3(i32 %x) {131; LA32-LABEL: shl_i32_3:132; LA32: # %bb.0:133; LA32-NEXT: slli.w $a0, $a0, 3134; LA32-NEXT: ret135;136; LA64-LABEL: shl_i32_3:137; LA64: # %bb.0:138; LA64-NEXT: slli.d $a0, $a0, 3139; LA64-NEXT: ret140 %shl = shl i32 %x, 3141 ret i32 %shl142}143 144define i64 @shl_i64_3(i64 %x) {145; LA32-LABEL: shl_i64_3:146; LA32: # %bb.0:147; LA32-NEXT: srli.w $a2, $a0, 29148; LA32-NEXT: slli.w $a1, $a1, 3149; LA32-NEXT: or $a1, $a1, $a2150; LA32-NEXT: slli.w $a0, $a0, 3151; LA32-NEXT: ret152;153; LA64-LABEL: shl_i64_3:154; LA64: # %bb.0:155; LA64-NEXT: slli.d $a0, $a0, 3156; LA64-NEXT: ret157 %shl = shl i64 %x, 3158 ret i64 %shl159}160