summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/M68k/Arith/bitwise.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/M68k/Arith/bitwise.ll')
-rw-r--r--llvm/test/CodeGen/M68k/Arith/bitwise.ll120
1 files changed, 120 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/M68k/Arith/bitwise.ll b/llvm/test/CodeGen/M68k/Arith/bitwise.ll
index d5fe191ab174..fa8ea1370f86 100644
--- a/llvm/test/CodeGen/M68k/Arith/bitwise.ll
+++ b/llvm/test/CodeGen/M68k/Arith/bitwise.ll
@@ -230,3 +230,123 @@ define i32 @eoril(i32 %a) nounwind {
%1 = xor i32 %a, 305419896
ret i32 %1
}
+
+define i64 @lshr64(i64 %a, i64 %b) nounwind {
+; CHECK-LABEL: lshr64:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: suba.l #12, %sp
+; CHECK-NEXT: movem.l %d2-%d4, (0,%sp) ; 16-byte Folded Spill
+; CHECK-NEXT: move.l (28,%sp), %d3
+; CHECK-NEXT: move.l (16,%sp), %d2
+; CHECK-NEXT: move.l %d3, %d1
+; CHECK-NEXT: add.l #-32, %d1
+; CHECK-NEXT: bmi .LBB18_1
+; CHECK-NEXT: ; %bb.2:
+; CHECK-NEXT: move.l #0, %d0
+; CHECK-NEXT: bra .LBB18_3
+; CHECK-NEXT: .LBB18_1:
+; CHECK-NEXT: move.l %d2, %d0
+; CHECK-NEXT: lsr.l %d3, %d0
+; CHECK-NEXT: .LBB18_3:
+; CHECK-NEXT: move.l %d3, %d4
+; CHECK-NEXT: add.l #-32, %d4
+; CHECK-NEXT: bmi .LBB18_4
+; CHECK-NEXT: ; %bb.5:
+; CHECK-NEXT: lsr.l %d1, %d2
+; CHECK-NEXT: move.l %d2, %d1
+; CHECK-NEXT: bra .LBB18_6
+; CHECK-NEXT: .LBB18_4:
+; CHECK-NEXT: move.l %d3, %d4
+; CHECK-NEXT: eori.l #31, %d4
+; CHECK-NEXT: lsl.l #1, %d2
+; CHECK-NEXT: move.l (20,%sp), %d1
+; CHECK-NEXT: lsl.l %d4, %d2
+; CHECK-NEXT: lsr.l %d3, %d1
+; CHECK-NEXT: or.l %d2, %d1
+; CHECK-NEXT: .LBB18_6:
+; CHECK-NEXT: movem.l (0,%sp), %d2-%d4 ; 16-byte Folded Reload
+; CHECK-NEXT: adda.l #12, %sp
+; CHECK-NEXT: rts
+ %1 = lshr i64 %a, %b
+ ret i64 %1
+}
+
+define i64 @ashr64(i64 %a, i64 %b) nounwind {
+; CHECK-LABEL: ashr64:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: suba.l #8, %sp
+; CHECK-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill
+; CHECK-NEXT: move.l (24,%sp), %d2
+; CHECK-NEXT: move.l (12,%sp), %d0
+; CHECK-NEXT: move.l %d2, %d3
+; CHECK-NEXT: add.l #-32, %d3
+; CHECK-NEXT: move.l %d2, %d1
+; CHECK-NEXT: add.l #-32, %d1
+; CHECK-NEXT: bmi .LBB19_1
+; CHECK-NEXT: ; %bb.2:
+; CHECK-NEXT: move.l %d0, %d1
+; CHECK-NEXT: asr.l %d3, %d1
+; CHECK-NEXT: bra .LBB19_3
+; CHECK-NEXT: .LBB19_1:
+; CHECK-NEXT: move.l %d2, %d1
+; CHECK-NEXT: eori.l #31, %d1
+; CHECK-NEXT: move.l %d0, %d3
+; CHECK-NEXT: lsl.l #1, %d3
+; CHECK-NEXT: lsl.l %d1, %d3
+; CHECK-NEXT: move.l (16,%sp), %d1
+; CHECK-NEXT: lsr.l %d2, %d1
+; CHECK-NEXT: or.l %d3, %d1
+; CHECK-NEXT: .LBB19_3:
+; CHECK-NEXT: move.l %d2, %d3
+; CHECK-NEXT: add.l #-32, %d3
+; CHECK-NEXT: bmi .LBB19_5
+; CHECK-NEXT: ; %bb.4:
+; CHECK-NEXT: move.l #31, %d2
+; CHECK-NEXT: .LBB19_5:
+; CHECK-NEXT: asr.l %d2, %d0
+; CHECK-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload
+; CHECK-NEXT: adda.l #8, %sp
+; CHECK-NEXT: rts
+ %1 = ashr i64 %a, %b
+ ret i64 %1
+}
+
+define i64 @shl64(i64 %a, i64 %b) nounwind {
+; CHECK-LABEL: shl64:
+; CHECK: ; %bb.0:
+; CHECK-NEXT: suba.l #12, %sp
+; CHECK-NEXT: movem.l %d2-%d4, (0,%sp) ; 16-byte Folded Spill
+; CHECK-NEXT: move.l (28,%sp), %d3
+; CHECK-NEXT: move.l (20,%sp), %d2
+; CHECK-NEXT: move.l %d3, %d0
+; CHECK-NEXT: add.l #-32, %d0
+; CHECK-NEXT: bmi .LBB20_1
+; CHECK-NEXT: ; %bb.2:
+; CHECK-NEXT: move.l #0, %d1
+; CHECK-NEXT: bra .LBB20_3
+; CHECK-NEXT: .LBB20_1:
+; CHECK-NEXT: move.l %d2, %d1
+; CHECK-NEXT: lsl.l %d3, %d1
+; CHECK-NEXT: .LBB20_3:
+; CHECK-NEXT: move.l %d3, %d4
+; CHECK-NEXT: add.l #-32, %d4
+; CHECK-NEXT: bmi .LBB20_4
+; CHECK-NEXT: ; %bb.5:
+; CHECK-NEXT: lsl.l %d0, %d2
+; CHECK-NEXT: move.l %d2, %d0
+; CHECK-NEXT: bra .LBB20_6
+; CHECK-NEXT: .LBB20_4:
+; CHECK-NEXT: move.l %d3, %d4
+; CHECK-NEXT: eori.l #31, %d4
+; CHECK-NEXT: lsr.l #1, %d2
+; CHECK-NEXT: move.l (16,%sp), %d0
+; CHECK-NEXT: lsr.l %d4, %d2
+; CHECK-NEXT: lsl.l %d3, %d0
+; CHECK-NEXT: or.l %d2, %d0
+; CHECK-NEXT: .LBB20_6:
+; CHECK-NEXT: movem.l (0,%sp), %d2-%d4 ; 16-byte Folded Reload
+; CHECK-NEXT: adda.l #12, %sp
+; CHECK-NEXT: rts
+ %1 = shl i64 %a, %b
+ ret i64 %1
+}