[GlobalISel] NFC: Regen some tests + improve test coverage for wide even types
It turns out we don't do an awesome job with weird types like s318 (and other types near them, like s316). We don't have any test coverage for those types, so let's add some so it's easier to see the impact of legalization improvements on them when we make changes. Since the test generator was changed, it's easier to update relevant tests prior to changing things rather than squinting at a bunch of "ah, CHECK is now CHECK-NEXT" lines. So, let's just regenerate a bunch of tests while we're here. Unfortunately the "CHECK-NEXT" scheme doesn't work with legalize-cmp for some reason, and the test will fail. So keep that one having CHECK lines.
This commit is contained in:
parent
09f33a430b
commit
5830afa532
|
@ -6,12 +6,12 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
; CHECK-LABEL: name: test_scalar_and_small
|
; CHECK-LABEL: name: test_scalar_and_small
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[TRUNC1]]
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
; CHECK: $w0 = COPY [[AND]](s32)
|
; CHECK-NEXT: $w0 = COPY [[AND]](s32)
|
||||||
; CHECK: $x0 = COPY [[COPY]](s64)
|
; CHECK-NEXT: $x0 = COPY [[COPY]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s64) = COPY $x1
|
%1:_(s64) = COPY $x1
|
||||||
%2:_(s8) = G_TRUNC %0(s64)
|
%2:_(s8) = G_TRUNC %0(s64)
|
||||||
|
@ -29,44 +29,88 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
; CHECK-LABEL: name: test_nonpow2
|
; CHECK-LABEL: name: test_nonpow2
|
||||||
; CHECK: %ptr:_(p0) = COPY $x0
|
; CHECK: %ptr:_(p0) = COPY $x0
|
||||||
; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64), align 16)
|
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64), align 16)
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C1]](s64)
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C1]](s64)
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
|
||||||
; CHECK: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16) from unknown-address + 8, align 8)
|
; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16) from unknown-address + 8, align 8)
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
||||||
; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
|
||||||
; CHECK: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 10, align 2)
|
; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 10, align 2)
|
||||||
; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
|
||||||
; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD1]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD1]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV]], [[C3]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV]], [[C3]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL]], [[ZEXTLOAD]]
|
||||||
; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[C]], [[LOAD]]
|
; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[C]], [[LOAD]]
|
||||||
; CHECK: [[OR2:%[0-9]+]]:_(s64) = G_OR [[OR]], [[C]]
|
; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[OR]], [[C]]
|
||||||
; CHECK: [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64), align 16)
|
; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD %ptr(p0) :: (load (s64), align 16)
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY [[PTR_ADD]](p0)
|
||||||
; CHECK: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY1]](p0) :: (load (s16) from unknown-address + 8, align 8)
|
; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY1]](p0) :: (load (s16) from unknown-address + 8, align 8)
|
||||||
; CHECK: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C2]](s64)
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C2]](s64)
|
||||||
; CHECK: [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 10, align 2)
|
; CHECK-NEXT: [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 10, align 2)
|
||||||
; CHECK: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD3]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD3]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[C3]](s64)
|
; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[C3]](s64)
|
||||||
; CHECK: [[OR3:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD1]]
|
; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[ZEXTLOAD1]]
|
||||||
; CHECK: [[OR4:%[0-9]+]]:_(s64) = G_OR [[C]], [[LOAD2]]
|
; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s64) = G_OR [[C]], [[LOAD2]]
|
||||||
; CHECK: [[OR5:%[0-9]+]]:_(s64) = G_OR [[OR3]], [[C]]
|
; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s64) = G_OR [[OR3]], [[C]]
|
||||||
; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[OR1]], [[OR4]]
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[OR1]], [[OR4]]
|
||||||
; CHECK: [[AND1:%[0-9]+]]:_(s64) = G_AND [[OR2]], [[OR5]]
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[OR2]], [[OR5]]
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY [[AND]](s64)
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[AND]](s64)
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[AND1]](s64)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[AND1]](s64)
|
||||||
; CHECK: G_STORE [[COPY2]](s64), %ptr(p0) :: (store (s64), align 16)
|
; CHECK-NEXT: G_STORE [[COPY2]](s64), %ptr(p0) :: (store (s64), align 16)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[TRUNC]], [[C3]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[TRUNC]], [[C3]](s64)
|
||||||
; CHECK: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C2]](s64)
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C2]](s64)
|
||||||
; CHECK: G_STORE [[TRUNC]](s32), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 8, align 8)
|
; CHECK-NEXT: G_STORE [[TRUNC]](s32), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 8, align 8)
|
||||||
; CHECK: G_STORE [[LSHR]](s32), [[PTR_ADD3]](p0) :: (store (s8) into unknown-address + 10, align 2)
|
; CHECK-NEXT: G_STORE [[LSHR]](s32), [[PTR_ADD3]](p0) :: (store (s8) into unknown-address + 10, align 2)
|
||||||
%ptr:_(p0) = COPY $x0
|
%ptr:_(p0) = COPY $x0
|
||||||
%a:_(s88) = G_LOAD %ptr(p0) :: (load (s88))
|
%a:_(s88) = G_LOAD %ptr(p0) :: (load (s88))
|
||||||
%b:_(s88) = G_LOAD %ptr(p0) :: (load (s88))
|
%b:_(s88) = G_LOAD %ptr(p0) :: (load (s88))
|
||||||
%and:_(s88) = G_AND %a, %b
|
%and:_(s88) = G_AND %a, %b
|
||||||
G_STORE %and(s88), %ptr(p0) :: (store (s88))
|
G_STORE %and(s88), %ptr(p0) :: (store (s88))
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: test_s318_and
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_s318_and
|
||||||
|
; CHECK: liveins: $x0
|
||||||
|
; CHECK-NEXT: {{ $}}
|
||||||
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s64) = G_AND [[AND1]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s64) = G_AND [[AND2]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s64) = G_AND [[AND3]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s64) = G_AND [[AND4]], [[C1]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND5]](s64), %ptr(p0) :: (store (s64), align 64)
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND6]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND7]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16, align 16)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND8]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND9]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32, align 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
||||||
|
%a:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%b:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
%and:_(s318) = G_AND %a, %b
|
||||||
|
G_STORE %and(s318), %ptr(p0) :: (store (s318))
|
||||||
|
RET_ReallyLR implicit $x0
|
||||||
|
|
|
@ -218,3 +218,64 @@ body: |
|
||||||
successors:
|
successors:
|
||||||
bb.3:
|
bb.3:
|
||||||
RET_ReallyLR
|
RET_ReallyLR
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: test_s318_eq
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
; CHECK-LABEL: name: test_s318_eq
|
||||||
|
; CHECK: bb.0:
|
||||||
|
; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
|
||||||
|
; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
|
; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND1:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND2:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND3:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND4:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C1]]
|
||||||
|
; CHECK: [[AND5:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[AND6:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[AND7:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[AND8:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND9:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND10:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND11:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK: [[AND12:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C1]]
|
||||||
|
; CHECK: [[AND13:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[AND14:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[AND15:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C2]]
|
||||||
|
; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[AND]], [[AND8]]
|
||||||
|
; CHECK: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[AND1]], [[AND9]]
|
||||||
|
; CHECK: [[XOR2:%[0-9]+]]:_(s64) = G_XOR [[AND2]], [[AND10]]
|
||||||
|
; CHECK: [[XOR3:%[0-9]+]]:_(s64) = G_XOR [[AND3]], [[AND11]]
|
||||||
|
; CHECK: [[XOR4:%[0-9]+]]:_(s64) = G_XOR [[AND4]], [[AND12]]
|
||||||
|
; CHECK: [[XOR5:%[0-9]+]]:_(s64) = G_XOR [[AND5]], [[AND13]]
|
||||||
|
; CHECK: [[XOR6:%[0-9]+]]:_(s64) = G_XOR [[AND6]], [[AND14]]
|
||||||
|
; CHECK: [[XOR7:%[0-9]+]]:_(s64) = G_XOR [[AND7]], [[AND15]]
|
||||||
|
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[XOR]], [[XOR1]]
|
||||||
|
; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[OR]], [[XOR2]]
|
||||||
|
; CHECK: [[OR2:%[0-9]+]]:_(s64) = G_OR [[OR1]], [[XOR3]]
|
||||||
|
; CHECK: [[OR3:%[0-9]+]]:_(s64) = G_OR [[OR2]], [[XOR4]]
|
||||||
|
; CHECK: [[OR4:%[0-9]+]]:_(s64) = G_OR [[OR3]], [[XOR5]]
|
||||||
|
; CHECK: [[OR5:%[0-9]+]]:_(s64) = G_OR [[OR4]], [[XOR6]]
|
||||||
|
; CHECK: [[OR6:%[0-9]+]]:_(s64) = G_OR [[OR5]], [[XOR7]]
|
||||||
|
; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[OR6]](s64), [[C2]]
|
||||||
|
; CHECK: %cmp:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
|
; CHECK: G_BRCOND %cmp(s1), %bb.1
|
||||||
|
; CHECK: G_BR %bb.2
|
||||||
|
; CHECK: bb.1:
|
||||||
|
; CHECK: successors:
|
||||||
|
; CHECK: bb.2:
|
||||||
|
; CHECK: RET_ReallyLR
|
||||||
|
bb.1:
|
||||||
|
%lhs:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%rhs:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%cmp:_(s1) = G_ICMP intpred(eq), %lhs(s318), %rhs
|
||||||
|
G_BRCOND %cmp(s1), %bb.2
|
||||||
|
G_BR %bb.3
|
||||||
|
bb.2:
|
||||||
|
successors:
|
||||||
|
bb.3:
|
||||||
|
RET_ReallyLR
|
||||||
|
|
|
@ -43,13 +43,13 @@ body: |
|
||||||
liveins: $x0
|
liveins: $x0
|
||||||
; CHECK-LABEL: name: test_fconstant
|
; CHECK-LABEL: name: test_fconstant
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
|
; CHECK: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
|
||||||
; CHECK: $w0 = COPY [[C]](s32)
|
; CHECK-NEXT: $w0 = COPY [[C]](s32)
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_FCONSTANT double 2.000000e+00
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_FCONSTANT double 2.000000e+00
|
||||||
; CHECK: $x0 = COPY [[C1]](s64)
|
; CHECK-NEXT: $x0 = COPY [[C1]](s64)
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00
|
||||||
; CHECK: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[C2]](s32)
|
; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[C2]](s32)
|
||||||
; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FPTRUNC]](s16)
|
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FPTRUNC]](s16)
|
||||||
; CHECK: $w0 = COPY [[ANYEXT]](s32)
|
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
|
||||||
%0:_(s32) = G_FCONSTANT float 1.0
|
%0:_(s32) = G_FCONSTANT float 1.0
|
||||||
$w0 = COPY %0
|
$w0 = COPY %0
|
||||||
%1:_(s64) = G_FCONSTANT double 2.0
|
%1:_(s64) = G_FCONSTANT double 2.0
|
||||||
|
@ -67,10 +67,46 @@ body: |
|
||||||
liveins: $x0
|
liveins: $x0
|
||||||
; CHECK-LABEL: name: s792
|
; CHECK-LABEL: name: s792
|
||||||
; CHECK: %trunc:_(s32) = G_CONSTANT i32 0
|
; CHECK: %trunc:_(s32) = G_CONSTANT i32 0
|
||||||
; CHECK: $w0 = COPY %trunc(s32)
|
; CHECK-NEXT: $w0 = COPY %trunc(s32)
|
||||||
; CHECK: RET_ReallyLR implicit $w0
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
%cst:_(s792) = G_CONSTANT i792 0
|
%cst:_(s792) = G_CONSTANT i792 0
|
||||||
%trunc:_(s32) = G_TRUNC %cst(s792)
|
%trunc:_(s32) = G_TRUNC %cst(s792)
|
||||||
$w0 = COPY %trunc(s32)
|
$w0 = COPY %trunc(s32)
|
||||||
RET_ReallyLR implicit $w0
|
RET_ReallyLR implicit $w0
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: s318
|
||||||
|
registers:
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
; CHECK-LABEL: name: s318
|
||||||
|
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1234
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[C]], [[C2]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C2]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C2]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C2]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C3]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND]](s64), %ptr(p0) :: (store (s64), align 64)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16, align 16)
|
||||||
|
; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C6]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C7]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND4]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32, align 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
|
%cst:_(s318) = G_CONSTANT i318 1234
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
G_STORE %cst(s318), %ptr(p0) :: (store (s318))
|
||||||
|
RET_ReallyLR implicit $w0
|
||||||
|
...
|
||||||
|
|
|
@ -10,22 +10,23 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: load_store_test
|
; CHECK-LABEL: name: load_store_test
|
||||||
; CHECK: liveins: $x0, $x1
|
; CHECK: liveins: $x0, $x1
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
|
; CHECK-NEXT: {{ $}}
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1
|
||||||
; CHECK: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16), align 4)
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16), align 4)
|
||||||
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
||||||
; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 2, align 2)
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 2, align 2)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[LOAD]], [[C2]](s64)
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[LOAD]], [[C2]](s64)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[OR]], [[C2]](s64)
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
|
||||||
; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[OR]], [[C2]](s64)
|
||||||
; CHECK: G_STORE [[OR]](s32), [[COPY1]](p0) :: (store (s16), align 4)
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s64)
|
||||||
; CHECK: G_STORE [[LSHR]](s32), [[PTR_ADD1]](p0) :: (store (s8) into unknown-address + 2, align 2)
|
; CHECK-NEXT: G_STORE [[OR]](s32), [[COPY1]](p0) :: (store (s16), align 4)
|
||||||
; CHECK: $w0 = COPY [[C]](s32)
|
; CHECK-NEXT: G_STORE [[LSHR]](s32), [[PTR_ADD1]](p0) :: (store (s8) into unknown-address + 2, align 2)
|
||||||
; CHECK: RET_ReallyLR implicit $w0
|
; CHECK-NEXT: $w0 = COPY [[C]](s32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
%0:_(p0) = COPY $x0
|
%0:_(p0) = COPY $x0
|
||||||
%1:_(p0) = COPY $x1
|
%1:_(p0) = COPY $x1
|
||||||
%3:_(s32) = G_CONSTANT i32 0
|
%3:_(s32) = G_CONSTANT i32 0
|
||||||
|
@ -47,24 +48,62 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: store_i56
|
; CHECK-LABEL: name: store_i56
|
||||||
; CHECK: liveins: $x0
|
; CHECK: liveins: $x0
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
|
; CHECK-NEXT: {{ $}}
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[C]], [[C1]](s64)
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[C]], [[C1]](s64)
|
||||||
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
|
||||||
; CHECK: G_STORE [[C]](s64), [[COPY]](p0) :: (store (s32), align 8)
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
|
; CHECK-NEXT: G_STORE [[C]](s64), [[COPY]](p0) :: (store (s32), align 8)
|
||||||
; CHECK: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
|
||||||
; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[TRUNC]], [[C3]](s64)
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
; CHECK: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[TRUNC]], [[C3]](s64)
|
||||||
; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C4]](s64)
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
|
||||||
; CHECK: G_STORE [[TRUNC]](s32), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 4, align 4)
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C4]](s64)
|
||||||
; CHECK: G_STORE [[LSHR1]](s32), [[PTR_ADD1]](p0) :: (store (s8) into unknown-address + 6, align 2)
|
; CHECK-NEXT: G_STORE [[TRUNC]](s32), [[PTR_ADD]](p0) :: (store (s16) into unknown-address + 4, align 4)
|
||||||
; CHECK: RET_ReallyLR
|
; CHECK-NEXT: G_STORE [[LSHR1]](s32), [[PTR_ADD1]](p0) :: (store (s8) into unknown-address + 6, align 2)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR
|
||||||
%0:_(p0) = COPY $x0
|
%0:_(p0) = COPY $x0
|
||||||
%1:_(s56) = G_CONSTANT i56 32
|
%1:_(s56) = G_CONSTANT i56 32
|
||||||
G_STORE %1(s56), %0(p0) :: (store (s56), align 8)
|
G_STORE %1(s56), %0(p0) :: (store (s56), align 8)
|
||||||
RET_ReallyLR
|
RET_ReallyLR
|
||||||
|
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: store_s318
|
||||||
|
alignment: 4
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
; CHECK-LABEL: name: store_s318
|
||||||
|
; CHECK: liveins: $x0
|
||||||
|
; CHECK-NEXT: {{ $}}
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C1]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND]](s64), %ptr(p0) :: (store (s64))
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND4]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
%val:_(s318) = G_IMPLICIT_DEF
|
||||||
|
G_STORE %val(s318), %ptr(p0) :: (store (s318), align 8)
|
||||||
|
RET_ReallyLR
|
||||||
|
|
|
@ -8,12 +8,12 @@ body: |
|
||||||
liveins: $x0, $x1, $x2, $x3
|
liveins: $x0, $x1, $x2, $x3
|
||||||
; CHECK-LABEL: name: test_scalar_or_small
|
; CHECK-LABEL: name: test_scalar_or_small
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[TRUNC]], [[TRUNC1]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[TRUNC]], [[TRUNC1]]
|
||||||
; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[OR]](s32)
|
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[OR]](s32)
|
||||||
; CHECK: $x0 = COPY [[ANYEXT]](s64)
|
; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s64) = COPY $x1
|
%1:_(s64) = COPY $x1
|
||||||
%2:_(s8) = G_TRUNC %0
|
%2:_(s8) = G_TRUNC %0
|
||||||
|
@ -34,14 +34,14 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: test_big_scalar_power_of_2
|
; CHECK-LABEL: name: test_big_scalar_power_of_2
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[COPY2]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[COPY2]]
|
||||||
; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[COPY1]], [[COPY3]]
|
; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[COPY1]], [[COPY3]]
|
||||||
; CHECK: $x0 = COPY [[OR]](s64)
|
; CHECK-NEXT: $x0 = COPY [[OR]](s64)
|
||||||
; CHECK: $x1 = COPY [[OR1]](s64)
|
; CHECK-NEXT: $x1 = COPY [[OR1]](s64)
|
||||||
; CHECK: RET_ReallyLR implicit $x0, implicit $x1
|
; CHECK-NEXT: RET_ReallyLR implicit $x0, implicit $x1
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s64) = COPY $x1
|
%1:_(s64) = COPY $x1
|
||||||
%2:_(s64) = COPY $x2
|
%2:_(s64) = COPY $x2
|
||||||
|
@ -54,3 +54,47 @@ body: |
|
||||||
$x1 = COPY %8
|
$x1 = COPY %8
|
||||||
RET_ReallyLR implicit $x0, implicit $x1
|
RET_ReallyLR implicit $x0, implicit $x1
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: test_s318_or
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_s318_or
|
||||||
|
; CHECK: liveins: $x0
|
||||||
|
; CHECK-NEXT: {{ $}}
|
||||||
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s64) = G_OR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s64) = G_OR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[OR]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[OR1]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[OR2]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[OR3]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[OR4]], [[C1]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND]](s64), %ptr(p0) :: (store (s64), align 64)
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16, align 16)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND4]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32, align 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
||||||
|
%a:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%b:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
%or:_(s318) = G_OR %a, %b
|
||||||
|
G_STORE %or(s318), %ptr(p0) :: (store (s318))
|
||||||
|
RET_ReallyLR implicit $x0
|
||||||
|
|
|
@ -1,31 +1,30 @@
|
||||||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -O0 -march=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
|
# RUN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
|
||||||
# RUN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK
|
|
||||||
---
|
---
|
||||||
name: test_shift
|
name: test_shift
|
||||||
body: |
|
body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
; CHECK-LABEL: name: test_shift
|
; CHECK-LABEL: name: test_shift
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 8
|
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 8
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXT_INREG]], [[AND]](s32)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXT_INREG]], [[AND]](s32)
|
||||||
; CHECK: $w0 = COPY [[ASHR]](s32)
|
; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)
|
||||||
; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]
|
||||||
; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32)
|
||||||
; CHECK: $w0 = COPY [[LSHR]](s32)
|
; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)
|
||||||
; CHECK: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC4]], [[C]]
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC4]], [[C]]
|
||||||
; CHECK: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC5]], [[AND3]](s32)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC5]], [[AND3]](s32)
|
||||||
; CHECK: $w0 = COPY [[SHL]](s32)
|
; CHECK-NEXT: $w0 = COPY [[SHL]](s32)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s64) = COPY $x1
|
%1:_(s64) = COPY $x1
|
||||||
%2:_(s8) = G_TRUNC %0(s64)
|
%2:_(s8) = G_TRUNC %0(s64)
|
||||||
|
@ -47,10 +46,10 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_i64_i32
|
; CHECK-LABEL: name: test_shl_i64_i32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
||||||
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[ZEXT]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[ZEXT]](s64)
|
||||||
; CHECK: $x0 = COPY [[SHL]](s64)
|
; CHECK-NEXT: $x0 = COPY [[SHL]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s32) = COPY $w1
|
%1:_(s32) = COPY $w1
|
||||||
%2:_(s64) = G_SHL %0, %1
|
%2:_(s64) = G_SHL %0, %1
|
||||||
|
@ -63,10 +62,10 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_i64_i32
|
; CHECK-LABEL: name: test_ashr_i64_i32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
||||||
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[ZEXT]](s64)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[ZEXT]](s64)
|
||||||
; CHECK: $x0 = COPY [[ASHR]](s64)
|
; CHECK-NEXT: $x0 = COPY [[ASHR]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s32) = COPY $w1
|
%1:_(s32) = COPY $w1
|
||||||
%2:_(s64) = G_ASHR %0, %1
|
%2:_(s64) = G_ASHR %0, %1
|
||||||
|
@ -79,10 +78,10 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_i64_i32
|
; CHECK-LABEL: name: test_lshr_i64_i32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
|
||||||
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[ZEXT]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[ZEXT]](s64)
|
||||||
; CHECK: $x0 = COPY [[LSHR]](s64)
|
; CHECK-NEXT: $x0 = COPY [[LSHR]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s32) = COPY $w1
|
%1:_(s32) = COPY $w1
|
||||||
%2:_(s64) = G_LSHR %0, %1
|
%2:_(s64) = G_LSHR %0, %1
|
||||||
|
@ -96,27 +95,27 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_s128_s128
|
; CHECK-LABEL: name: test_shl_s128_s128
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
||||||
; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
||||||
; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
||||||
; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
||||||
; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s64)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s64)
|
||||||
; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]
|
||||||
; CHECK: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s64)
|
; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s64)
|
||||||
; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[SHL]], [[C1]]
|
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[SHL]], [[C1]]
|
||||||
; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[SHL2]]
|
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[SHL2]]
|
||||||
; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV1]], [[SELECT1]]
|
; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV1]], [[SELECT1]]
|
||||||
; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT2]](s64)
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT2]](s64)
|
||||||
; CHECK: $q0 = COPY [[MV]](s128)
|
; CHECK-NEXT: $q0 = COPY [[MV]](s128)
|
||||||
%0:_(s128) = COPY $q0
|
%0:_(s128) = COPY $q0
|
||||||
%1:_(s128) = COPY $q1
|
%1:_(s128) = COPY $q1
|
||||||
%2:_(s128) = G_SHL %0, %1
|
%2:_(s128) = G_SHL %0, %1
|
||||||
|
@ -130,27 +129,27 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_s128_s128
|
; CHECK-LABEL: name: test_lshr_s128_s128
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
||||||
; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
||||||
; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
||||||
; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
||||||
; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[TRUNC]](s64)
|
||||||
; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL]]
|
||||||
; CHECK: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[SUB]](s64)
|
; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[SUB]](s64)
|
||||||
; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[LSHR2]]
|
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[LSHR2]]
|
||||||
; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
|
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
|
||||||
; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[LSHR]], [[C1]]
|
; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[LSHR]], [[C1]]
|
||||||
; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
|
||||||
; CHECK: $q0 = COPY [[MV]](s128)
|
; CHECK-NEXT: $q0 = COPY [[MV]](s128)
|
||||||
%0:_(s128) = COPY $q0
|
%0:_(s128) = COPY $q0
|
||||||
%1:_(s128) = COPY $q1
|
%1:_(s128) = COPY $q1
|
||||||
%2:_(s128) = G_LSHR %0, %1
|
%2:_(s128) = G_LSHR %0, %1
|
||||||
|
@ -164,29 +163,29 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_s128_s128
|
; CHECK-LABEL: name: test_ashr_s128_s128
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
||||||
; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
|
||||||
; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
|
||||||
; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
|
||||||
; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[TRUNC]](s64)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
|
||||||
; CHECK: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C2]](s64)
|
; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C2]](s64)
|
||||||
; CHECK: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[SUB]](s64)
|
; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[SUB]](s64)
|
||||||
; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[ASHR2]]
|
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[ASHR2]]
|
||||||
; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
|
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
|
||||||
; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[ASHR]], [[ASHR1]]
|
; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[ASHR]], [[ASHR1]]
|
||||||
; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
|
||||||
; CHECK: $q0 = COPY [[MV]](s128)
|
; CHECK-NEXT: $q0 = COPY [[MV]](s128)
|
||||||
%0:_(s128) = COPY $q0
|
%0:_(s128) = COPY $q0
|
||||||
%1:_(s128) = COPY $q1
|
%1:_(s128) = COPY $q1
|
||||||
%2:_(s128) = G_ASHR %0, %1
|
%2:_(s128) = G_ASHR %0, %1
|
||||||
|
@ -200,9 +199,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v2i32
|
; CHECK-LABEL: name: test_ashr_v2i32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s32>) = G_ASHR [[COPY]], [[COPY1]](<2 x s32>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<2 x s32>) = G_ASHR [[COPY]], [[COPY1]](<2 x s32>)
|
||||||
; CHECK: $d0 = COPY [[ASHR]](<2 x s32>)
|
; CHECK-NEXT: $d0 = COPY [[ASHR]](<2 x s32>)
|
||||||
%0:_(<2 x s32>) = COPY $d0
|
%0:_(<2 x s32>) = COPY $d0
|
||||||
%1:_(<2 x s32>) = COPY $d1
|
%1:_(<2 x s32>) = COPY $d1
|
||||||
%2:_(<2 x s32>) = G_ASHR %0, %1
|
%2:_(<2 x s32>) = G_ASHR %0, %1
|
||||||
|
@ -215,9 +214,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v4i32
|
; CHECK-LABEL: name: test_ashr_v4i32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[COPY]], [[COPY1]](<4 x s32>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[COPY]], [[COPY1]](<4 x s32>)
|
||||||
; CHECK: $q0 = COPY [[ASHR]](<4 x s32>)
|
; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>)
|
||||||
%0:_(<4 x s32>) = COPY $q0
|
%0:_(<4 x s32>) = COPY $q0
|
||||||
%1:_(<4 x s32>) = COPY $q1
|
%1:_(<4 x s32>) = COPY $q1
|
||||||
%2:_(<4 x s32>) = G_ASHR %0, %1
|
%2:_(<4 x s32>) = G_ASHR %0, %1
|
||||||
|
@ -232,10 +231,10 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: shl_cimm_32
|
; CHECK-LABEL: name: shl_cimm_32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
|
||||||
; CHECK: $w0 = COPY [[SHL]](s32)
|
; CHECK-NEXT: $w0 = COPY [[SHL]](s32)
|
||||||
; CHECK: RET_ReallyLR implicit $w0
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
%0:_(s32) = COPY $w0
|
%0:_(s32) = COPY $w0
|
||||||
%1:_(s32) = G_CONSTANT i32 8
|
%1:_(s32) = G_CONSTANT i32 8
|
||||||
%2:_(s32) = G_SHL %0, %1(s32)
|
%2:_(s32) = G_SHL %0, %1(s32)
|
||||||
|
@ -251,10 +250,10 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: lshr_cimm_32
|
; CHECK-LABEL: name: lshr_cimm_32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s64)
|
||||||
; CHECK: $w0 = COPY [[LSHR]](s32)
|
; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)
|
||||||
; CHECK: RET_ReallyLR implicit $w0
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
%0:_(s32) = COPY $w0
|
%0:_(s32) = COPY $w0
|
||||||
%1:_(s32) = G_CONSTANT i32 8
|
%1:_(s32) = G_CONSTANT i32 8
|
||||||
%2:_(s32) = G_LSHR %0, %1(s32)
|
%2:_(s32) = G_LSHR %0, %1(s32)
|
||||||
|
@ -270,10 +269,10 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: ashr_cimm_32
|
; CHECK-LABEL: name: ashr_cimm_32
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64)
|
||||||
; CHECK: $w0 = COPY [[ASHR]](s32)
|
; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)
|
||||||
; CHECK: RET_ReallyLR implicit $w0
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
||||||
%0:_(s32) = COPY $w0
|
%0:_(s32) = COPY $w0
|
||||||
%1:_(s32) = G_CONSTANT i32 8
|
%1:_(s32) = G_CONSTANT i32 8
|
||||||
%2:_(s32) = G_ASHR %0, %1(s32)
|
%2:_(s32) = G_ASHR %0, %1(s32)
|
||||||
|
@ -287,9 +286,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v16i8
|
; CHECK-LABEL: name: test_ashr_v16i8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[COPY]], [[COPY1]](<16 x s8>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[COPY]], [[COPY1]](<16 x s8>)
|
||||||
; CHECK: $q0 = COPY [[ASHR]](<16 x s8>)
|
; CHECK-NEXT: $q0 = COPY [[ASHR]](<16 x s8>)
|
||||||
%0:_(<16 x s8>) = COPY $q0
|
%0:_(<16 x s8>) = COPY $q0
|
||||||
%1:_(<16 x s8>) = COPY $q1
|
%1:_(<16 x s8>) = COPY $q1
|
||||||
%2:_(<16 x s8>) = G_ASHR %0, %1
|
%2:_(<16 x s8>) = G_ASHR %0, %1
|
||||||
|
@ -301,9 +300,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v8i16
|
; CHECK-LABEL: name: test_ashr_v8i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[COPY]], [[COPY1]](<8 x s16>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[COPY]], [[COPY1]](<8 x s16>)
|
||||||
; CHECK: $q0 = COPY [[ASHR]](<8 x s16>)
|
; CHECK-NEXT: $q0 = COPY [[ASHR]](<8 x s16>)
|
||||||
%0:_(<8 x s16>) = COPY $q0
|
%0:_(<8 x s16>) = COPY $q0
|
||||||
%1:_(<8 x s16>) = COPY $q1
|
%1:_(<8 x s16>) = COPY $q1
|
||||||
%2:_(<8 x s16>) = G_ASHR %0, %1
|
%2:_(<8 x s16>) = G_ASHR %0, %1
|
||||||
|
@ -315,9 +314,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_v16i8
|
; CHECK-LABEL: name: test_shl_v16i8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY]], [[COPY1]](<16 x s8>)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY]], [[COPY1]](<16 x s8>)
|
||||||
; CHECK: $q0 = COPY [[SHL]](<16 x s8>)
|
; CHECK-NEXT: $q0 = COPY [[SHL]](<16 x s8>)
|
||||||
%0:_(<16 x s8>) = COPY $q0
|
%0:_(<16 x s8>) = COPY $q0
|
||||||
%1:_(<16 x s8>) = COPY $q1
|
%1:_(<16 x s8>) = COPY $q1
|
||||||
%2:_(<16 x s8>) = G_SHL %0, %1
|
%2:_(<16 x s8>) = G_SHL %0, %1
|
||||||
|
@ -329,9 +328,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_v8i16
|
; CHECK-LABEL: name: test_shl_v8i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY]], [[COPY1]](<8 x s16>)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY]], [[COPY1]](<8 x s16>)
|
||||||
; CHECK: $q0 = COPY [[SHL]](<8 x s16>)
|
; CHECK-NEXT: $q0 = COPY [[SHL]](<8 x s16>)
|
||||||
%0:_(<8 x s16>) = COPY $q0
|
%0:_(<8 x s16>) = COPY $q0
|
||||||
%1:_(<8 x s16>) = COPY $q1
|
%1:_(<8 x s16>) = COPY $q1
|
||||||
%2:_(<8 x s16>) = G_SHL %0, %1
|
%2:_(<8 x s16>) = G_SHL %0, %1
|
||||||
|
@ -343,9 +342,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_v16i8
|
; CHECK-LABEL: name: test_lshr_v16i8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[COPY]], [[COPY1]](<16 x s8>)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[COPY]], [[COPY1]](<16 x s8>)
|
||||||
; CHECK: $q0 = COPY [[LSHR]](<16 x s8>)
|
; CHECK-NEXT: $q0 = COPY [[LSHR]](<16 x s8>)
|
||||||
%0:_(<16 x s8>) = COPY $q0
|
%0:_(<16 x s8>) = COPY $q0
|
||||||
%1:_(<16 x s8>) = COPY $q1
|
%1:_(<16 x s8>) = COPY $q1
|
||||||
%2:_(<16 x s8>) = G_LSHR %0, %1
|
%2:_(<16 x s8>) = G_LSHR %0, %1
|
||||||
|
@ -357,9 +356,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_v8i16
|
; CHECK-LABEL: name: test_lshr_v8i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[COPY1]](<8 x s16>)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[COPY1]](<8 x s16>)
|
||||||
; CHECK: $q0 = COPY [[LSHR]](<8 x s16>)
|
; CHECK-NEXT: $q0 = COPY [[LSHR]](<8 x s16>)
|
||||||
%0:_(<8 x s16>) = COPY $q0
|
%0:_(<8 x s16>) = COPY $q0
|
||||||
%1:_(<8 x s16>) = COPY $q1
|
%1:_(<8 x s16>) = COPY $q1
|
||||||
%2:_(<8 x s16>) = G_LSHR %0, %1
|
%2:_(<8 x s16>) = G_LSHR %0, %1
|
||||||
|
@ -371,9 +370,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_v4i16
|
; CHECK-LABEL: name: test_shl_v4i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(<4 x s16>) = G_SHL [[COPY]], [[COPY1]](<4 x s16>)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<4 x s16>) = G_SHL [[COPY]], [[COPY1]](<4 x s16>)
|
||||||
; CHECK: $d0 = COPY [[SHL]](<4 x s16>)
|
; CHECK-NEXT: $d0 = COPY [[SHL]](<4 x s16>)
|
||||||
%0:_(<4 x s16>) = COPY $d0
|
%0:_(<4 x s16>) = COPY $d0
|
||||||
%1:_(<4 x s16>) = COPY $d1
|
%1:_(<4 x s16>) = COPY $d1
|
||||||
%2:_(<4 x s16>) = G_SHL %0, %1
|
%2:_(<4 x s16>) = G_SHL %0, %1
|
||||||
|
@ -385,9 +384,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_v4i16
|
; CHECK-LABEL: name: test_lshr_v4i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(<4 x s16>) = G_LSHR [[COPY]], [[COPY1]](<4 x s16>)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<4 x s16>) = G_LSHR [[COPY]], [[COPY1]](<4 x s16>)
|
||||||
; CHECK: $d0 = COPY [[LSHR]](<4 x s16>)
|
; CHECK-NEXT: $d0 = COPY [[LSHR]](<4 x s16>)
|
||||||
%0:_(<4 x s16>) = COPY $d0
|
%0:_(<4 x s16>) = COPY $d0
|
||||||
%1:_(<4 x s16>) = COPY $d1
|
%1:_(<4 x s16>) = COPY $d1
|
||||||
%2:_(<4 x s16>) = G_LSHR %0, %1
|
%2:_(<4 x s16>) = G_LSHR %0, %1
|
||||||
|
@ -399,9 +398,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v4i16
|
; CHECK-LABEL: name: test_ashr_v4i16
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s16>) = G_ASHR [[COPY]], [[COPY1]](<4 x s16>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s16>) = G_ASHR [[COPY]], [[COPY1]](<4 x s16>)
|
||||||
; CHECK: $d0 = COPY [[ASHR]](<4 x s16>)
|
; CHECK-NEXT: $d0 = COPY [[ASHR]](<4 x s16>)
|
||||||
%0:_(<4 x s16>) = COPY $d0
|
%0:_(<4 x s16>) = COPY $d0
|
||||||
%1:_(<4 x s16>) = COPY $d1
|
%1:_(<4 x s16>) = COPY $d1
|
||||||
%2:_(<4 x s16>) = G_ASHR %0, %1
|
%2:_(<4 x s16>) = G_ASHR %0, %1
|
||||||
|
@ -413,14 +412,14 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v8s32
|
; CHECK-LABEL: name: test_ashr_v8s32
|
||||||
; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
|
; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
|
||||||
; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR]], [[BUILD_VECTOR2]](<4 x s32>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR]], [[BUILD_VECTOR2]](<4 x s32>)
|
||||||
; CHECK: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR1]], [[BUILD_VECTOR3]](<4 x s32>)
|
; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR1]], [[BUILD_VECTOR3]](<4 x s32>)
|
||||||
; CHECK: $q0 = COPY [[ASHR]](<4 x s32>)
|
; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>)
|
||||||
; CHECK: $q1 = COPY [[ASHR1]](<4 x s32>)
|
; CHECK-NEXT: $q1 = COPY [[ASHR1]](<4 x s32>)
|
||||||
%0:_(<8 x s32>) = G_IMPLICIT_DEF
|
%0:_(<8 x s32>) = G_IMPLICIT_DEF
|
||||||
%1:_(<8 x s32>) = G_IMPLICIT_DEF
|
%1:_(<8 x s32>) = G_IMPLICIT_DEF
|
||||||
%2:_(<8 x s32>) = G_ASHR %0, %1
|
%2:_(<8 x s32>) = G_ASHR %0, %1
|
||||||
|
@ -434,9 +433,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_shl_v8s8
|
; CHECK-LABEL: name: test_shl_v8s8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(<8 x s8>) = G_SHL [[COPY]], [[COPY1]](<8 x s8>)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<8 x s8>) = G_SHL [[COPY]], [[COPY1]](<8 x s8>)
|
||||||
; CHECK: $d0 = COPY [[SHL]](<8 x s8>)
|
; CHECK-NEXT: $d0 = COPY [[SHL]](<8 x s8>)
|
||||||
%0:_(<8 x s8>) = COPY $d0
|
%0:_(<8 x s8>) = COPY $d0
|
||||||
%1:_(<8 x s8>) = COPY $d1
|
%1:_(<8 x s8>) = COPY $d1
|
||||||
%2:_(<8 x s8>) = G_SHL %0, %1
|
%2:_(<8 x s8>) = G_SHL %0, %1
|
||||||
|
@ -448,9 +447,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_ashr_v8s8
|
; CHECK-LABEL: name: test_ashr_v8s8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
||||||
; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s8>) = G_ASHR [[COPY]], [[COPY1]](<8 x s8>)
|
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<8 x s8>) = G_ASHR [[COPY]], [[COPY1]](<8 x s8>)
|
||||||
; CHECK: $d0 = COPY [[ASHR]](<8 x s8>)
|
; CHECK-NEXT: $d0 = COPY [[ASHR]](<8 x s8>)
|
||||||
%0:_(<8 x s8>) = COPY $d0
|
%0:_(<8 x s8>) = COPY $d0
|
||||||
%1:_(<8 x s8>) = COPY $d1
|
%1:_(<8 x s8>) = COPY $d1
|
||||||
%2:_(<8 x s8>) = G_ASHR %0, %1
|
%2:_(<8 x s8>) = G_ASHR %0, %1
|
||||||
|
@ -463,9 +462,9 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_v8s8
|
; CHECK-LABEL: name: test_lshr_v8s8
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s8>) = G_LSHR [[COPY]], [[COPY1]](<8 x s8>)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s8>) = G_LSHR [[COPY]], [[COPY1]](<8 x s8>)
|
||||||
; CHECK: $d0 = COPY [[LSHR]](<8 x s8>)
|
; CHECK-NEXT: $d0 = COPY [[LSHR]](<8 x s8>)
|
||||||
%0:_(<8 x s8>) = COPY $d0
|
%0:_(<8 x s8>) = COPY $d0
|
||||||
%1:_(<8 x s8>) = COPY $d1
|
%1:_(<8 x s8>) = COPY $d1
|
||||||
%2:_(<8 x s8>) = G_LSHR %0, %1
|
%2:_(<8 x s8>) = G_LSHR %0, %1
|
||||||
|
@ -477,26 +476,26 @@ body: |
|
||||||
bb.0:
|
bb.0:
|
||||||
; CHECK-LABEL: name: test_lshr_nonpow2
|
; CHECK-LABEL: name: test_lshr_nonpow2
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: %a:_(s32) = COPY $w1
|
; CHECK-NEXT: %a:_(s32) = COPY $w1
|
||||||
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
|
||||||
; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)
|
||||||
; CHECK: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), [[C]](s32)
|
; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), [[C]](s32)
|
||||||
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
||||||
; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C1]]
|
; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C1]]
|
||||||
; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C1]], [[COPY]]
|
; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C1]], [[COPY]]
|
||||||
; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C1]]
|
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C1]]
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C2]]
|
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C2]]
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
||||||
; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[MV]], [[COPY]](s64)
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[MV]], [[COPY]](s64)
|
||||||
; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[SUB1]](s64)
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[SUB1]](s64)
|
||||||
; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
|
||||||
; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[MV1]], [[SUB]](s64)
|
; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[MV1]], [[SUB]](s64)
|
||||||
; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC]](s1), [[OR]], [[LSHR1]]
|
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC]](s1), [[OR]], [[LSHR1]]
|
||||||
; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[MV]], [[SELECT]]
|
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[MV]], [[SELECT]]
|
||||||
; CHECK: %d1:_(s32), %d2:_(s32) = G_UNMERGE_VALUES [[SELECT1]](s64)
|
; CHECK-NEXT: %d1:_(s32), %d2:_(s32) = G_UNMERGE_VALUES [[SELECT1]](s64)
|
||||||
; CHECK: $w0 = COPY %d2(s32)
|
; CHECK-NEXT: $w0 = COPY %d2(s32)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%a:_(s32) = COPY $w1
|
%a:_(s32) = COPY $w1
|
||||||
%merge:_(s96) = G_MERGE_VALUES %a, %a, %a
|
%merge:_(s96) = G_MERGE_VALUES %a, %a, %a
|
||||||
|
@ -505,3 +504,64 @@ body: |
|
||||||
$w0 = COPY %d2(s32)
|
$w0 = COPY %d2(s32)
|
||||||
|
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: test_lshr_nonpow2_wide
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
; CHECK-LABEL: name: test_lshr_nonpow2_wide
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
|
; CHECK-NEXT: %a:_(s32) = COPY $w1
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
|
||||||
|
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)
|
||||||
|
; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)
|
||||||
|
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), [[C]](s32)
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 128
|
||||||
|
; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C2]]
|
||||||
|
; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C2]], [[COPY]]
|
||||||
|
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C2]]
|
||||||
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
|
||||||
|
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C1]]
|
||||||
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
|
||||||
|
; CHECK-NEXT: [[SUB2:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C3]]
|
||||||
|
; CHECK-NEXT: [[SUB3:%[0-9]+]]:_(s64) = G_SUB [[C3]], [[COPY]]
|
||||||
|
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C3]]
|
||||||
|
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP2]](s32)
|
||||||
|
; CHECK-NEXT: [[ICMP3:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C1]]
|
||||||
|
; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP3]](s32)
|
||||||
|
; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[MV]], [[COPY]](s64)
|
||||||
|
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[SUB3]](s64)
|
||||||
|
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
|
||||||
|
; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[MV1]], [[SUB2]](s64)
|
||||||
|
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[OR]], [[LSHR1]]
|
||||||
|
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC3]](s1), [[MV]], [[SELECT]]
|
||||||
|
; CHECK-NEXT: [[ICMP4:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[SUB1]](s64), [[C3]]
|
||||||
|
; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP4]](s32)
|
||||||
|
; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[MV2]], [[SUB1]](s64)
|
||||||
|
; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC4]](s1), [[SHL1]], [[C1]]
|
||||||
|
; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SELECT1]], [[SELECT2]]
|
||||||
|
; CHECK-NEXT: [[SUB4:%[0-9]+]]:_(s64) = G_SUB [[SUB]], [[C3]]
|
||||||
|
; CHECK-NEXT: [[SUB5:%[0-9]+]]:_(s64) = G_SUB [[C3]], [[SUB]]
|
||||||
|
; CHECK-NEXT: [[ICMP5:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[SUB]](s64), [[C3]]
|
||||||
|
; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP5]](s32)
|
||||||
|
; CHECK-NEXT: [[ICMP6:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[SUB]](s64), [[C1]]
|
||||||
|
; CHECK-NEXT: [[TRUNC6:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP6]](s32)
|
||||||
|
; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[MV2]], [[SUB]](s64)
|
||||||
|
; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[C1]], [[SUB5]](s64)
|
||||||
|
; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[LSHR2]], [[SHL2]]
|
||||||
|
; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s64) = G_LSHR [[C1]], [[SUB4]](s64)
|
||||||
|
; CHECK-NEXT: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC5]](s1), [[OR2]], [[LSHR3]]
|
||||||
|
; CHECK-NEXT: [[SELECT4:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC6]](s1), [[MV2]], [[SELECT3]]
|
||||||
|
; CHECK-NEXT: [[SELECT5:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC]](s1), [[OR1]], [[SELECT4]]
|
||||||
|
; CHECK-NEXT: [[SELECT6:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[MV]], [[SELECT5]]
|
||||||
|
; CHECK-NEXT: %d1:_(s32), %d2:_(s32) = G_UNMERGE_VALUES [[SELECT6]](s64)
|
||||||
|
; CHECK-NEXT: $w0 = COPY %d2(s32)
|
||||||
|
%0:_(s64) = COPY $x0
|
||||||
|
%a:_(s32) = COPY $w1
|
||||||
|
%merge:_(s160) = G_MERGE_VALUES %a, %a, %a, %a, %a
|
||||||
|
%lshr:_(s160) = G_LSHR %merge, %0
|
||||||
|
%d1:_(s32), %d2:_(s32), %d3:_(s32), %d4:_(s32), %d5:_(s32) = G_UNMERGE_VALUES %lshr
|
||||||
|
$w0 = COPY %d2(s32)
|
||||||
|
|
||||||
|
...
|
||||||
|
|
|
@ -6,12 +6,12 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
; CHECK-LABEL: name: test_scalar_xor_small
|
; CHECK-LABEL: name: test_scalar_xor_small
|
||||||
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
|
||||||
; CHECK: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[TRUNC]], [[TRUNC1]]
|
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[TRUNC]], [[TRUNC1]]
|
||||||
; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[XOR]](s32)
|
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[XOR]](s32)
|
||||||
; CHECK: $x0 = COPY [[ANYEXT]](s64)
|
; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
|
||||||
%0:_(s64) = COPY $x0
|
%0:_(s64) = COPY $x0
|
||||||
%1:_(s64) = COPY $x1
|
%1:_(s64) = COPY $x1
|
||||||
%2:_(s8) = G_TRUNC %0(s64)
|
%2:_(s8) = G_TRUNC %0(s64)
|
||||||
|
@ -21,3 +21,90 @@ body: |
|
||||||
$x0 = COPY %5(s64)
|
$x0 = COPY %5(s64)
|
||||||
|
|
||||||
...
|
...
|
||||||
|
---
|
||||||
|
name: test_s318_xor
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
; CHECK-LABEL: name: test_s318_xor
|
||||||
|
; CHECK: liveins: $x0
|
||||||
|
; CHECK-NEXT: {{ $}}
|
||||||
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4611686018427387903
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[XOR]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[XOR1]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[XOR2]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[XOR3]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[XOR4]], [[C1]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND]](s64), %ptr(p0) :: (store (s64), align 64)
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16, align 16)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND4]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32, align 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
||||||
|
%a:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%b:_(s318) = G_IMPLICIT_DEF
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
%xor:_(s318) = G_XOR %a, %b
|
||||||
|
G_STORE %xor(s318), %ptr(p0) :: (store (s318))
|
||||||
|
RET_ReallyLR implicit $x0
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: test_s319_xor
|
||||||
|
tracksRegLiveness: true
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $x0
|
||||||
|
; CHECK-LABEL: name: test_s319_xor
|
||||||
|
; CHECK: liveins: $x0
|
||||||
|
; CHECK-NEXT: {{ $}}
|
||||||
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
|
||||||
|
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
|
||||||
|
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s64) = G_XOR [[DEF]], [[DEF]]
|
||||||
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
|
||||||
|
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
|
||||||
|
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[XOR]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[XOR1]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[XOR2]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s64) = G_AND [[XOR3]], [[C]]
|
||||||
|
; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s64) = G_AND [[XOR4]], [[C1]]
|
||||||
|
; CHECK-NEXT: G_STORE [[AND]](s64), %ptr(p0) :: (store (s64), align 64)
|
||||||
|
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
|
||||||
|
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
|
||||||
|
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
|
||||||
|
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND2]](s64), [[PTR_ADD1]](p0) :: (store (s64) into unknown-address + 16, align 16)
|
||||||
|
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
|
||||||
|
; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND3]](s64), [[PTR_ADD2]](p0) :: (store (s64) into unknown-address + 24)
|
||||||
|
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
|
||||||
|
; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
|
||||||
|
; CHECK-NEXT: G_STORE [[AND4]](s64), [[PTR_ADD3]](p0) :: (store (s64) into unknown-address + 32, align 32)
|
||||||
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
||||||
|
%a:_(s319) = G_IMPLICIT_DEF
|
||||||
|
%b:_(s319) = G_IMPLICIT_DEF
|
||||||
|
%ptr:_(p0) = COPY $x0
|
||||||
|
%xor:_(s319) = G_XOR %a, %b
|
||||||
|
G_STORE %xor(s319), %ptr(p0) :: (store (s319))
|
||||||
|
RET_ReallyLR implicit $x0
|
||||||
|
|
Loading…
Reference in New Issue