33 lines
999 B
LLVM
33 lines
999 B
LLVM
; Pin: an i8 constant loaded into A is a 16-bit `lda #imm` (3 cycles),
|
|
; not `sep #0x20 ; lda #imm ; rep #0x20` (9): the byte's high half is
|
|
; nobody's business, and LDAi8imm is in the flag-wrap pass's isLdaLike
|
|
; list either way. A store's own SEP that follows still takes the 8-bit
|
|
; form and drops the REP/SEP pair between them.
|
|
;
|
|
; RUN: llc -mtriple=w65816 -O2 < %s | FileCheck %s
|
|
; RUN: env W65816_DISABLE_I8_IMM16=1 llc -mtriple=w65816 -O2 < %s | FileCheck %s --check-prefix=OFF
|
|
|
|
target datalayout = "e-m:e-p:32:16-i16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"
|
|
|
|
declare i8 @takeByte(i8)
|
|
|
|
define i8 @retByte() {
|
|
; CHECK-LABEL: retByte:
|
|
; CHECK: rep #0x30
|
|
; CHECK-NEXT: lda #0x7
|
|
; CHECK-NEXT: rtl
|
|
; OFF-LABEL: retByte:
|
|
; OFF: sep #0x20
|
|
; OFF-NEXT: lda #0x7
|
|
; OFF-NEXT: rep #0x20
|
|
ret i8 7
|
|
}
|
|
|
|
define i8 @passByte() {
|
|
; CHECK-LABEL: passByte:
|
|
; CHECK: rep #0x30
|
|
; CHECK-NEXT: lda #0xfb
|
|
; CHECK-NEXT: jsl takeByte
|
|
%r = call i8 @takeByte(i8 -5)
|
|
ret i8 %r
|
|
}
|