Switch Cranelift over to regalloc2. (#3989)

This PR switches Cranelift over to the new register allocator, regalloc2.

See [this document](https://gist.github.com/cfallin/08553421a91f150254fe878f67301801)
for a summary of the design changes. This switchover has implications for
core VCode/MachInst types and the lowering pass.

Overall, this change brings improvements to both compile time and speed of
generated code (runtime), as reported in #3942:

```
Benchmark       Compilation (wallclock)     Execution (wallclock)
blake3-scalar   25% faster                  28% faster
blake3-simd     no diff                     no diff
meshoptimizer   19% faster                  17% faster
pulldown-cmark  17% faster                  no diff
bz2             15% faster                  no diff
SpiderMonkey,   21% faster                  2% faster
  fib(30)
clang.wasm      42% faster                  N/A
```
This commit is contained in:
Chris Fallin
2022-04-14 10:28:21 -07:00
committed by GitHub
parent bfae6384aa
commit a0318f36f0
181 changed files with 16887 additions and 21587 deletions

View File

@@ -10,14 +10,9 @@ block0(v0: i64, v1: i32):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldr w0, [x0, w1, SXTW]
; Inst 1: ret
; }}
; block0:
; ldr w0, [x0, w1, SXTW]
; ret
function %f6(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -27,14 +22,9 @@ block0(v0: i64, v1: i32):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldr w0, [x0, w1, SXTW]
; Inst 1: ret
; }}
; block0:
; ldr w0, [x0, w1, SXTW]
; ret
function %f7(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -45,15 +35,10 @@ block0(v0: i32, v1: i32):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: mov w0, w0
; Inst 1: ldr w0, [x0, w1, UXTW]
; Inst 2: ret
; }}
; block0:
; mov w6, w0
; ldr w0, [x6, w1, UXTW]
; ret
function %f8(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -66,17 +51,12 @@ block0(v0: i64, v1: i32):
return v7
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: add x2, x0, #68
; Inst 1: add x0, x2, x0
; Inst 2: add x0, x0, x1, SXTW
; Inst 3: ldr w0, [x0, w1, SXTW]
; Inst 4: ret
; }}
; block0:
; add x6, x0, #68
; add x6, x6, x0
; add x6, x6, x1, SXTW
; ldr w0, [x6, w1, SXTW]
; ret
function %f9(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -88,16 +68,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v7
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: add x0, x0, x2
; Inst 1: add x0, x0, x1
; Inst 2: ldur w0, [x0, #48]
; Inst 3: ret
; }}
; block0:
; add x0, x0, x2
; add x0, x0, x1
; ldr w0, [x0, #48]
; ret
function %f10(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -109,17 +84,12 @@ block0(v0: i64, v1: i64, v2: i64):
return v7
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: movz x3, #4100
; Inst 1: add x1, x3, x1
; Inst 2: add x1, x1, x2
; Inst 3: ldr w0, [x1, x0]
; Inst 4: ret
; }}
; block0:
; movz x8, #4100
; add x8, x8, x1
; add x8, x8, x2
; ldr w0, [x8, x0]
; ret
function %f10() -> i32 {
block0:
@@ -128,15 +98,10 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #1234
; Inst 1: ldr w0, [x0]
; Inst 2: ret
; }}
; block0:
; movz x2, #1234
; ldr w0, [x2]
; ret
function %f11(i64) -> i32 {
block0(v0: i64):
@@ -146,15 +111,10 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: add x0, x0, #8388608
; Inst 1: ldr w0, [x0]
; Inst 2: ret
; }}
; block0:
; add x4, x0, #8388608
; ldr w0, [x4]
; ret
function %f12(i64) -> i32 {
block0(v0: i64):
@@ -164,15 +124,10 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sub x0, x0, #4
; Inst 1: ldr w0, [x0]
; Inst 2: ret
; }}
; block0:
; sub x4, x0, #4
; ldr w0, [x4]
; ret
function %f13(i64) -> i32 {
block0(v0: i64):
@@ -182,17 +137,12 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: movz w1, #51712
; Inst 1: movk w1, #15258, LSL #16
; Inst 2: add x0, x1, x0
; Inst 3: ldr w0, [x0]
; Inst 4: ret
; }}
; block0:
; movz w4, #51712
; movk w4, #15258, LSL #16
; add x4, x4, x0
; ldr w0, [x4]
; ret
function %f14(i32) -> i32 {
block0(v0: i32):
@@ -201,15 +151,10 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxtw x0, w0
; Inst 1: ldr w0, [x0]
; Inst 2: ret
; }}
; block0:
; sxtw x4, w0
; ldr w0, [x4]
; ret
function %f15(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -220,15 +165,10 @@ block0(v0: i32, v1: i32):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxtw x0, w0
; Inst 1: ldr w0, [x0, w1, SXTW]
; Inst 2: ret
; }}
; block0:
; sxtw x6, w0
; ldr w0, [x6, w1, SXTW]
; ret
function %f18(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -238,15 +178,10 @@ block0(v0: i64, v1: i64, v2: i64):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movn w0, #4097
; Inst 1: ldrsh x0, [x0]
; Inst 2: ret
; }}
; block0:
; movn w8, #4097
; ldrsh x0, [x8]
; ret
function %f19(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -256,15 +191,10 @@ block0(v0: i64, v1: i64, v2: i64):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #4098
; Inst 1: ldrsh x0, [x0]
; Inst 2: ret
; }}
; block0:
; movz x8, #4098
; ldrsh x0, [x8]
; ret
function %f20(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -274,16 +204,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: movn w0, #4097
; Inst 1: sxtw x0, w0
; Inst 2: ldrsh x0, [x0]
; Inst 3: ret
; }}
; block0:
; movn w8, #4097
; sxtw x10, w8
; ldrsh x0, [x10]
; ret
function %f21(i64, i64, i64) -> i32 {
block0(v0: i64, v1: i64, v2: i64):
@@ -293,16 +218,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: movz x0, #4098
; Inst 1: sxtw x0, w0
; Inst 2: ldrsh x0, [x0]
; Inst 3: ret
; }}
; block0:
; movz x8, #4098
; sxtw x10, w8
; ldrsh x0, [x10]
; ret
function %i128(i64) -> i128 {
block0(v0: i64):
@@ -311,17 +231,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov x1, x0
; Inst 1: ldp x2, x1, [x1]
; Inst 2: stp x2, x1, [x0]
; Inst 3: mov x0, x2
; Inst 4: ret
; }}
; block0:
; mov x8, x0
; ldp x3, x1, [x8]
; mov x11, x3
; stp x11, x1, [x0]
; mov x0, x3
; ret
function %i128_imm_offset(i64) -> i128 {
block0(v0: i64):
@@ -330,17 +246,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov x1, x0
; Inst 1: ldp x2, x1, [x1, #16]
; Inst 2: stp x2, x1, [x0, #16]
; Inst 3: mov x0, x2
; Inst 4: ret
; }}
; block0:
; mov x8, x0
; ldp x3, x1, [x8, #16]
; mov x11, x3
; stp x11, x1, [x0, #16]
; mov x0, x3
; ret
function %i128_imm_offset_large(i64) -> i128 {
block0(v0: i64):
@@ -349,17 +261,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov x1, x0
; Inst 1: ldp x2, x1, [x1, #504]
; Inst 2: stp x2, x1, [x0, #504]
; Inst 3: mov x0, x2
; Inst 4: ret
; }}
; block0:
; mov x8, x0
; ldp x3, x1, [x8, #504]
; mov x11, x3
; stp x11, x1, [x0, #504]
; mov x0, x3
; ret
function %i128_imm_offset_negative_large(i64) -> i128 {
block0(v0: i64):
@@ -368,17 +276,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov x1, x0
; Inst 1: ldp x2, x1, [x1, #-512]
; Inst 2: stp x2, x1, [x0, #-512]
; Inst 3: mov x0, x2
; Inst 4: ret
; }}
; block0:
; mov x8, x0
; ldp x3, x1, [x8, #-512]
; mov x11, x3
; stp x11, x1, [x0, #-512]
; mov x0, x3
; ret
function %i128_add_offset(i64) -> i128 {
block0(v0: i64):
@@ -388,17 +292,13 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov x1, x0
; Inst 1: ldp x2, x1, [x1, #32]
; Inst 2: stp x2, x1, [x0, #32]
; Inst 3: mov x0, x2
; Inst 4: ret
; }}
; block0:
; mov x8, x0
; ldp x3, x1, [x8, #32]
; mov x11, x3
; stp x11, x1, [x0, #32]
; mov x0, x3
; ret
function %i128_32bit_sextend_simple(i32) -> i128 {
block0(v0: i32):
@@ -408,18 +308,13 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: sxtw x1, w0
; Inst 1: ldp x2, x1, [x1]
; Inst 2: sxtw x0, w0
; Inst 3: stp x2, x1, [x0]
; Inst 4: mov x0, x2
; Inst 5: ret
; }}
; block0:
; sxtw x8, w0
; ldp x4, x1, [x8]
; sxtw x9, w0
; mov x0, x4
; stp x0, x1, [x9]
; ret
function %i128_32bit_sextend(i64, i32) -> i128 {
block0(v0: i64, v1: i32):
@@ -431,18 +326,14 @@ block0(v0: i64, v1: i32):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: mov x2, x0
; Inst 1: add x2, x2, x1, SXTW
; Inst 2: ldp x3, x2, [x2, #24]
; Inst 3: add x0, x0, x1, SXTW
; Inst 4: stp x3, x2, [x0, #24]
; Inst 5: mov x0, x3
; Inst 6: mov x1, x2
; Inst 7: ret
; }}
; block0:
; mov x10, x0
; add x10, x10, x1, SXTW
; ldp x6, x7, [x10, #24]
; add x0, x0, x1, SXTW
; mov x15, x6
; mov x1, x7
; stp x15, x1, [x0, #24]
; mov x0, x6
; ret

View File

@@ -8,14 +8,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add x0, x0, x1
; Inst 1: ret
; }}
; block0:
; add x0, x0, x1
; ret
function %f2(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -23,14 +18,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sub x0, x0, x1
; Inst 1: ret
; }}
; block0:
; sub x0, x0, x1
; ret
function %f3(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -38,14 +28,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: madd x0, x0, x1, xzr
; Inst 1: ret
; }}
; block0:
; madd x0, x0, x1, xzr
; ret
function %f4(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -53,14 +38,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umulh x0, x0, x1
; Inst 1: ret
; }}
; block0:
; umulh x0, x0, x1
; ret
function %f5(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -68,14 +48,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smulh x0, x0, x1
; Inst 1: ret
; }}
; block0:
; smulh x0, x0, x1
; ret
function %f6(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -83,18 +58,13 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: cbnz x1, 8 ; udf
; Inst 1: adds xzr, x1, #1
; Inst 2: ccmp x0, #1, #nzcv, eq
; Inst 3: b.vc 8 ; udf
; Inst 4: sdiv x0, x0, x1
; Inst 5: ret
; }}
; block0:
; cbnz x1, 8 ; udf
; adds xzr, x1, #1
; ccmp x0, #1, #nzcv, eq
; b.vc 8 ; udf
; sdiv x0, x0, x1
; ret
function %f7(i64) -> i64 {
block0(v0: i64):
@@ -103,15 +73,10 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: orr x1, xzr, #2
; Inst 1: sdiv x0, x0, x1
; Inst 2: ret
; }}
; block0:
; orr x3, xzr, #2
; sdiv x0, x0, x3
; ret
function %f8(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -119,15 +84,10 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: cbnz x1, 8 ; udf
; Inst 1: udiv x0, x0, x1
; Inst 2: ret
; }}
; block0:
; cbnz x1, 8 ; udf
; udiv x0, x0, x1
; ret
function %f9(i64) -> i64 {
block0(v0: i64):
@@ -136,15 +96,10 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: orr x1, xzr, #2
; Inst 1: udiv x0, x0, x1
; Inst 2: ret
; }}
; block0:
; orr x3, xzr, #2
; udiv x0, x0, x3
; ret
function %f10(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -152,16 +107,11 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: cbnz x1, 8 ; udf
; Inst 1: sdiv x2, x0, x1
; Inst 2: msub x0, x2, x1, x0
; Inst 3: ret
; }}
; block0:
; cbnz x1, 8 ; udf
; sdiv x6, x0, x1
; msub x0, x6, x1, x0
; ret
function %f11(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -169,16 +119,11 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: cbnz x1, 8 ; udf
; Inst 1: udiv x2, x0, x1
; Inst 2: msub x0, x2, x1, x0
; Inst 3: ret
; }}
; block0:
; cbnz x1, 8 ; udf
; udiv x6, x0, x1
; msub x0, x6, x1, x0
; ret
function %f12(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -186,20 +131,15 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: sxtw x0, w0
; Inst 1: sxtw x1, w1
; Inst 2: cbnz x1, 8 ; udf
; Inst 3: adds wzr, w1, #1
; Inst 4: ccmp w0, #1, #nzcv, eq
; Inst 5: b.vc 8 ; udf
; Inst 6: sdiv x0, x0, x1
; Inst 7: ret
; }}
; block0:
; sxtw x5, w0
; sxtw x7, w1
; cbnz x7, 8 ; udf
; adds wzr, w7, #1
; ccmp w5, #1, #nzcv, eq
; b.vc 8 ; udf
; sdiv x0, x5, x7
; ret
function %f13(i32) -> i32 {
block0(v0: i32):
@@ -208,16 +148,11 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: sxtw x0, w0
; Inst 1: orr x1, xzr, #2
; Inst 2: sdiv x0, x0, x1
; Inst 3: ret
; }}
; block0:
; sxtw x3, w0
; orr x5, xzr, #2
; sdiv x0, x3, x5
; ret
function %f14(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -225,17 +160,12 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: mov w0, w0
; Inst 1: mov w1, w1
; Inst 2: cbnz x1, 8 ; udf
; Inst 3: udiv x0, x0, x1
; Inst 4: ret
; }}
; block0:
; mov w5, w0
; mov w7, w1
; cbnz x7, 8 ; udf
; udiv x0, x5, x7
; ret
function %f15(i32) -> i32 {
block0(v0: i32):
@@ -244,16 +174,11 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: mov w0, w0
; Inst 1: orr x1, xzr, #2
; Inst 2: udiv x0, x0, x1
; Inst 3: ret
; }}
; block0:
; mov w3, w0
; orr x5, xzr, #2
; udiv x0, x3, x5
; ret
function %f16(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -261,18 +186,13 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: sxtw x0, w0
; Inst 1: sxtw x1, w1
; Inst 2: cbnz x1, 8 ; udf
; Inst 3: sdiv x2, x0, x1
; Inst 4: msub x0, x2, x1, x0
; Inst 5: ret
; }}
; block0:
; sxtw x5, w0
; sxtw x7, w1
; cbnz x7, 8 ; udf
; sdiv x10, x5, x7
; msub x0, x10, x7, x5
; ret
function %f17(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -280,18 +200,13 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: mov w0, w0
; Inst 1: mov w1, w1
; Inst 2: cbnz x1, 8 ; udf
; Inst 3: udiv x2, x0, x1
; Inst 4: msub x0, x2, x1, x0
; Inst 5: ret
; }}
; block0:
; mov w5, w0
; mov w7, w1
; cbnz x7, 8 ; udf
; udiv x10, x5, x7
; msub x0, x10, x7, x5
; ret
function %f18(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -299,14 +214,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: and x0, x0, x1
; Inst 1: ret
; }}
; block0:
; and x0, x0, x1
; ret
function %f19(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -314,14 +224,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: orr x0, x0, x1
; Inst 1: ret
; }}
; block0:
; orr x0, x0, x1
; ret
function %f20(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -329,14 +234,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: eor x0, x0, x1
; Inst 1: ret
; }}
; block0:
; eor x0, x0, x1
; ret
function %f21(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -344,14 +244,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: bic x0, x0, x1
; Inst 1: ret
; }}
; block0:
; bic x0, x0, x1
; ret
function %f22(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -359,14 +254,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: orn x0, x0, x1
; Inst 1: ret
; }}
; block0:
; orn x0, x0, x1
; ret
function %f23(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -374,14 +264,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: eon x0, x0, x1
; Inst 1: ret
; }}
; block0:
; eon x0, x0, x1
; ret
function %f24(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -389,14 +274,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: orn x0, xzr, x0
; Inst 1: ret
; }}
; block0:
; orn x0, xzr, x0
; ret
function %f25(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -406,14 +286,9 @@ block0(v0: i32, v1: i32):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sub w0, w1, w0, LSL 21
; Inst 1: ret
; }}
; block0:
; sub w0, w1, w0, LSL 21
; ret
function %f26(i32) -> i32 {
block0(v0: i32):
@@ -422,14 +297,9 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sub w0, w0, #1
; Inst 1: ret
; }}
; block0:
; sub w0, w0, #1
; ret
function %f27(i32) -> i32 {
block0(v0: i32):
@@ -438,14 +308,9 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, #1
; Inst 1: ret
; }}
; block0:
; add w0, w0, #1
; ret
function %f28(i64) -> i64 {
block0(v0: i64):
@@ -454,14 +319,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add x0, x0, #1
; Inst 1: ret
; }}
; block0:
; add x0, x0, #1
; ret
function %f29(i64) -> i64 {
block0(v0: i64):
@@ -470,15 +330,10 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #1
; Inst 1: sub x0, xzr, x0
; Inst 2: ret
; }}
; block0:
; movz x3, #1
; sub x0, xzr, x3
; ret
function %f30(i8x16) -> i8x16 {
block0(v0: i8x16):
@@ -487,17 +342,12 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: movz x0, #1
; Inst 1: sub w0, wzr, w0
; Inst 2: dup v1.16b, w0
; Inst 3: ushl v0.16b, v0.16b, v1.16b
; Inst 4: ret
; }}
; block0:
; movz x3, #1
; sub w5, wzr, w3
; dup v7.16b, w5
; ushl v0.16b, v0.16b, v7.16b
; ret
function %add_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
@@ -505,15 +355,10 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: adds x0, x0, x2
; Inst 1: adc x1, x1, x3
; Inst 2: ret
; }}
; block0:
; adds x0, x0, x2
; adc x1, x1, x3
; ret
function %sub_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
@@ -521,15 +366,10 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs x0, x0, x2
; Inst 1: sbc x1, x1, x3
; Inst 2: ret
; }}
; block0:
; subs x0, x0, x2
; sbc x1, x1, x3
; ret
function %mul_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
@@ -537,17 +377,12 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: umulh x4, x0, x2
; Inst 1: madd x3, x0, x3, x4
; Inst 2: madd x1, x1, x2, x3
; Inst 3: madd x0, x0, x2, xzr
; Inst 4: ret
; }}
; block0:
; umulh x10, x0, x2
; madd x12, x0, x3, x10
; madd x1, x1, x2, x12
; madd x0, x0, x2, xzr
; ret
function %add_mul_1(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
@@ -556,14 +391,9 @@ block0(v0: i32, v1: i32, v2: i32):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: madd w0, w1, w2, w0
; Inst 1: ret
; }}
; block0:
; madd w0, w1, w2, w0
; ret
function %add_mul_2(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
@@ -572,14 +402,9 @@ block0(v0: i32, v1: i32, v2: i32):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: madd w0, w1, w2, w0
; Inst 1: ret
; }}
; block0:
; madd w0, w1, w2, w0
; ret
function %srem_const (i64) -> i64 {
block0(v0: i64):
@@ -588,16 +413,11 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: orr x1, xzr, #2
; Inst 1: sdiv x2, x0, x1
; Inst 2: msub x0, x2, x1, x0
; Inst 3: ret
; }}
; block0:
; orr x3, xzr, #2
; sdiv x5, x0, x3
; msub x0, x5, x3, x0
; ret
function %urem_const (i64) -> i64 {
block0(v0: i64):
@@ -606,16 +426,11 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: orr x1, xzr, #2
; Inst 1: udiv x2, x0, x1
; Inst 2: msub x0, x2, x1, x0
; Inst 3: ret
; }}
; block0:
; orr x3, xzr, #2
; udiv x5, x0, x3
; msub x0, x5, x3, x0
; ret
function %sdiv_minus_one(i64) -> i64 {
block0(v0: i64):
@@ -624,16 +439,11 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: movn x1, #0
; Inst 1: adds xzr, x1, #1
; Inst 2: ccmp x0, #1, #nzcv, eq
; Inst 3: b.vc 8 ; udf
; Inst 4: sdiv x0, x0, x1
; Inst 5: ret
; }}
; block0:
; movn x3, #0
; adds xzr, x3, #1
; ccmp x0, #1, #nzcv, eq
; b.vc 8 ; udf
; sdiv x0, x0, x3
; ret

View File

@@ -7,14 +7,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldaddal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldaddal x1, x4, [x0]
; ret
function %atomic_rmw_add_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -22,14 +17,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldaddal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldaddal w1, w4, [x0]
; ret
function %atomic_rmw_add_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -37,14 +27,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldaddalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldaddalh w1, w4, [x0]
; ret
function %atomic_rmw_add_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -52,14 +37,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldaddalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldaddalb w1, w4, [x0]
; ret
function %atomic_rmw_and_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -67,14 +47,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldclral x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldclral x1, x4, [x0]
; ret
function %atomic_rmw_and_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -82,14 +57,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldclral w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldclral w1, w4, [x0]
; ret
function %atomic_rmw_and_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -97,14 +67,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldclralh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldclralh w1, w4, [x0]
; ret
function %atomic_rmw_and_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -112,14 +77,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldclralb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldclralb w1, w4, [x0]
; ret
function %atomic_rmw_nand_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -127,25 +87,21 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: str x28, [sp, #-16]!
; Inst 3: stp x26, x27, [sp, #-16]!
; Inst 4: stp x24, x25, [sp, #-16]!
; Inst 5: mov x25, x0
; Inst 6: mov x26, x1
; Inst 7: 1: ldaxr x27, [x25]; and x28, x27, x26; mvn x28, x28; stlxr w24, x28, [x25]; cbnz w24, 1b
; Inst 8: ldp x24, x25, [sp], #16
; Inst 9: ldp x26, x27, [sp], #16
; Inst 10: ldr x28, [sp], #16
; Inst 11: ldp fp, lr, [sp], #16
; Inst 12: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x26, x27, [sp, #-16]!
; stp x24, x25, [sp, #-16]!
; block0:
; mov x25, x0
; mov x4, x1
; mov x26, x4
; 1: ldaxr x27, [x25]; and x28, x27, x26; mvn x28, x28; stlxr w24, x28, [x25]; cbnz w24, 1b
; ldp x24, x25, [sp], #16
; ldp x26, x27, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %atomic_rmw_nand_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -153,25 +109,21 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: str x28, [sp, #-16]!
; Inst 3: stp x26, x27, [sp, #-16]!
; Inst 4: stp x24, x25, [sp, #-16]!
; Inst 5: mov x25, x0
; Inst 6: mov x26, x1
; Inst 7: 1: ldaxr w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxr w24, w28, [x25]; cbnz w24, 1b
; Inst 8: ldp x24, x25, [sp], #16
; Inst 9: ldp x26, x27, [sp], #16
; Inst 10: ldr x28, [sp], #16
; Inst 11: ldp fp, lr, [sp], #16
; Inst 12: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x26, x27, [sp, #-16]!
; stp x24, x25, [sp, #-16]!
; block0:
; mov x25, x0
; mov x4, x1
; mov x26, x4
; 1: ldaxr w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxr w24, w28, [x25]; cbnz w24, 1b
; ldp x24, x25, [sp], #16
; ldp x26, x27, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %atomic_rmw_nand_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -179,25 +131,21 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: str x28, [sp, #-16]!
; Inst 3: stp x26, x27, [sp, #-16]!
; Inst 4: stp x24, x25, [sp, #-16]!
; Inst 5: mov x25, x0
; Inst 6: mov x26, x1
; Inst 7: 1: ldaxrh w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrh w24, w28, [x25]; cbnz w24, 1b
; Inst 8: ldp x24, x25, [sp], #16
; Inst 9: ldp x26, x27, [sp], #16
; Inst 10: ldr x28, [sp], #16
; Inst 11: ldp fp, lr, [sp], #16
; Inst 12: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x26, x27, [sp, #-16]!
; stp x24, x25, [sp, #-16]!
; block0:
; mov x25, x0
; mov x4, x1
; mov x26, x4
; 1: ldaxrh w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrh w24, w28, [x25]; cbnz w24, 1b
; ldp x24, x25, [sp], #16
; ldp x26, x27, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %atomic_rmw_nand_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -205,25 +153,21 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: str x28, [sp, #-16]!
; Inst 3: stp x26, x27, [sp, #-16]!
; Inst 4: stp x24, x25, [sp, #-16]!
; Inst 5: mov x25, x0
; Inst 6: mov x26, x1
; Inst 7: 1: ldaxrb w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrb w24, w28, [x25]; cbnz w24, 1b
; Inst 8: ldp x24, x25, [sp], #16
; Inst 9: ldp x26, x27, [sp], #16
; Inst 10: ldr x28, [sp], #16
; Inst 11: ldp fp, lr, [sp], #16
; Inst 12: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x26, x27, [sp, #-16]!
; stp x24, x25, [sp, #-16]!
; block0:
; mov x25, x0
; mov x4, x1
; mov x26, x4
; 1: ldaxrb w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrb w24, w28, [x25]; cbnz w24, 1b
; ldp x24, x25, [sp], #16
; ldp x26, x27, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %atomic_rmw_or_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -231,14 +175,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsetal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsetal x1, x4, [x0]
; ret
function %atomic_rmw_or_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -246,14 +185,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsetal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsetal w1, w4, [x0]
; ret
function %atomic_rmw_or_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -261,14 +195,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsetalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsetalh w1, w4, [x0]
; ret
function %atomic_rmw_or_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -276,14 +205,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsetalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsetalb w1, w4, [x0]
; ret
function %atomic_rmw_xor_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -291,14 +215,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldeoral x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldeoral x1, x4, [x0]
; ret
function %atomic_rmw_xor_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -306,14 +225,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldeoral w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldeoral w1, w4, [x0]
; ret
function %atomic_rmw_xor_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -321,14 +235,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldeoralh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldeoralh w1, w4, [x0]
; ret
function %atomic_rmw_xor_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -336,14 +245,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldeoralb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldeoralb w1, w4, [x0]
; ret
function %atomic_rmw_smax_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -351,14 +255,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsmaxal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsmaxal x1, x4, [x0]
; ret
function %atomic_rmw_smax_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -366,14 +265,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsmaxal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsmaxal w1, w4, [x0]
; ret
function %atomic_rmw_smax_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -381,14 +275,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsmaxalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsmaxalh w1, w4, [x0]
; ret
function %atomic_rmw_smax_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -396,14 +285,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsmaxalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsmaxalb w1, w4, [x0]
; ret
function %atomic_rmw_umax_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -411,14 +295,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldumaxal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldumaxal x1, x4, [x0]
; ret
function %atomic_rmw_umax_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -426,14 +305,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldumaxal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldumaxal w1, w4, [x0]
; ret
function %atomic_rmw_umax_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -441,14 +315,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldumaxalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldumaxalh w1, w4, [x0]
; ret
function %atomic_rmw_umax_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -456,14 +325,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldumaxalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldumaxalb w1, w4, [x0]
; ret
function %atomic_rmw_smin_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -471,14 +335,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsminal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsminal x1, x4, [x0]
; ret
function %atomic_rmw_smin_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -486,14 +345,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsminal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsminal w1, w4, [x0]
; ret
function %atomic_rmw_smin_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -501,14 +355,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsminalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsminalh w1, w4, [x0]
; ret
function %atomic_rmw_smin_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -516,14 +365,9 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldsminalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldsminalb w1, w4, [x0]
; ret
function %atomic_rmw_umin_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -531,14 +375,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lduminal x1, x0, [x0]
; Inst 1: ret
; }}
; block0:
; lduminal x1, x4, [x0]
; ret
function %atomic_rmw_umin_i32(i64, i32) {
block0(v0: i64, v1: i32):
@@ -546,14 +385,9 @@ block0(v0: i64, v1: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lduminal w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; lduminal w1, w4, [x0]
; ret
function %atomic_rmw_umin_i16(i64, i16) {
block0(v0: i64, v1: i16):
@@ -561,14 +395,9 @@ block0(v0: i64, v1: i16):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lduminalh w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; lduminalh w1, w4, [x0]
; ret
function %atomic_rmw_umin_i8(i64, i8) {
block0(v0: i64, v1: i8):
@@ -576,12 +405,7 @@ block0(v0: i64, v1: i8):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lduminalb w1, w0, [x0]
; Inst 1: ret
; }}
; block0:
; lduminalb w1, w4, [x0]
; ret

File diff suppressed because it is too large Load Diff

View File

@@ -7,14 +7,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldar x0, [x0]
; Inst 1: ret
; }}
; block0:
; ldar x0, [x0]
; ret
function %atomic_load_i32(i64) -> i32 {
block0(v0: i64):
@@ -22,14 +17,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldar w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldar w0, [x0]
; ret
function %atomic_load_i16(i64) -> i16 {
block0(v0: i64):
@@ -37,14 +27,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarh w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarh w0, [x0]
; ret
function %atomic_load_i8(i64) -> i8 {
block0(v0: i64):
@@ -52,14 +37,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarb w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarb w0, [x0]
; ret
function %atomic_load_i32_i64(i64) -> i64 {
block0(v0: i64):
@@ -68,14 +48,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldar w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldar w0, [x0]
; ret
function %atomic_load_i16_i64(i64) -> i64 {
block0(v0: i64):
@@ -84,14 +59,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarh w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarh w0, [x0]
; ret
function %atomic_load_i8_i64(i64) -> i64 {
block0(v0: i64):
@@ -100,14 +70,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarb w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarb w0, [x0]
; ret
function %atomic_load_i16_i32(i64) -> i32 {
block0(v0: i64):
@@ -116,14 +81,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarh w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarh w0, [x0]
; ret
function %atomic_load_i8_i32(i64) -> i32 {
block0(v0: i64):
@@ -132,12 +92,7 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldarb w0, [x0]
; Inst 1: ret
; }}
; block0:
; ldarb w0, [x0]
; ret

View File

@@ -7,14 +7,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlr x0, [x1]
; Inst 1: ret
; }}
; block0:
; stlr x0, [x1]
; ret
function %atomic_store_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -22,14 +17,9 @@ block0(v0: i32, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlr w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlr w0, [x1]
; ret
function %atomic_store_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -37,14 +27,9 @@ block0(v0: i16, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrh w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrh w0, [x1]
; ret
function %atomic_store_i8(i8, i64) {
block0(v0: i8, v1: i64):
@@ -52,14 +37,9 @@ block0(v0: i8, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrb w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrb w0, [x1]
; ret
function %atomic_store_i64_i32(i64, i64) {
block0(v0: i64, v1: i64):
@@ -68,14 +48,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlr w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlr w0, [x1]
; ret
function %atomic_store_i64_i16(i64, i64) {
block0(v0: i64, v1: i64):
@@ -84,14 +59,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrh w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrh w0, [x1]
; ret
function %atomic_store_i64_i8(i64, i64) {
block0(v0: i64, v1: i64):
@@ -100,14 +70,9 @@ block0(v0: i64, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrb w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrb w0, [x1]
; ret
function %atomic_store_i32_i16(i32, i64) {
block0(v0: i32, v1: i64):
@@ -116,14 +81,9 @@ block0(v0: i32, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrh w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrh w0, [x1]
; ret
function %atomic_store_i32_i8(i32, i64) {
block0(v0: i32, v1: i64):
@@ -132,12 +92,7 @@ block0(v0: i32, v1: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: stlrb w0, [x1]
; Inst 1: ret
; }}
; block0:
; stlrb w0, [x1]
; ret

View File

@@ -8,12 +8,7 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, w1
; Inst 1: ret
; }}
; block0:
; add w0, w0, w1
; ret

File diff suppressed because it is too large Load Diff

View File

@@ -9,15 +9,10 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: blr x1
; Inst 3: ldp fp, lr, [sp], #16
; Inst 4: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; blr x1
; ldp fp, lr, [sp], #16
; ret

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set unwind_info=false
set enable_probestack=false
target aarch64
@@ -11,12 +11,13 @@ block0(v0: i64):
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: ldr x1, 8 ; b 12 ; data
; nextln: blr x1
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; ldp fp, lr, [sp], #16
; ret
function %f2(i32) -> i64 {
fn0 = %g(i32 uext) -> i64 baldrdash_system_v
@@ -26,20 +27,40 @@ block0(v0: i32):
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; check: mov w0, w0
; nextln: ldr x1, 8 ; b 12 ; data
; nextln: blr x1
; check: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; stp x27, x28, [sp, #-16]!
; stp x25, x26, [sp, #-16]!
; stp x23, x24, [sp, #-16]!
; stp x21, x22, [sp, #-16]!
; stp x19, x20, [sp, #-16]!
; stp d14, d15, [sp, #-16]!
; stp d12, d13, [sp, #-16]!
; stp d10, d11, [sp, #-16]!
; stp d8, d9, [sp, #-16]!
; block0:
; mov w0, w0
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16
; ldp d14, d15, [sp], #16
; ldp x19, x20, [sp], #16
; ldp x21, x22, [sp], #16
; ldp x23, x24, [sp], #16
; ldp x25, x26, [sp], #16
; ldp x27, x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %f3(i32) -> i32 uext baldrdash_system_v {
block0(v0: i32):
return v0
}
; check: mov w0, w0
; block0:
; mov w0, w0
function %f4(i32) -> i64 {
fn0 = %g(i32 sext) -> i64 baldrdash_system_v
@@ -49,20 +70,40 @@ block0(v0: i32):
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; check: sxtw x0, w0
; nextln: ldr x1, 8 ; b 12 ; data
; nextln: blr x1
; check: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; stp x27, x28, [sp, #-16]!
; stp x25, x26, [sp, #-16]!
; stp x23, x24, [sp, #-16]!
; stp x21, x22, [sp, #-16]!
; stp x19, x20, [sp, #-16]!
; stp d14, d15, [sp, #-16]!
; stp d12, d13, [sp, #-16]!
; stp d10, d11, [sp, #-16]!
; stp d8, d9, [sp, #-16]!
; block0:
; sxtw x0, w0
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16
; ldp d14, d15, [sp], #16
; ldp x19, x20, [sp], #16
; ldp x21, x22, [sp], #16
; ldp x23, x24, [sp], #16
; ldp x25, x26, [sp], #16
; ldp x27, x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %f5(i32) -> i32 sext baldrdash_system_v {
block0(v0: i32):
return v0
}
; check: sxtw x0, w0
; block0:
; sxtw x0, w0
function %f6(i8) -> i64 {
fn0 = %g(i32, i32, i32, i32, i32, i32, i32, i32, i8 sext) -> i64
@@ -73,26 +114,27 @@ block0(v0: i8):
return v2
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: mov x8, x0
; nextln: sub sp, sp, #16
; nextln: virtual_sp_offset_adjust 16
; nextln: movz x0, #42
; nextln: movz x1, #42
; nextln: movz x2, #42
; nextln: movz x3, #42
; nextln: movz x4, #42
; nextln: movz x5, #42
; nextln: movz x6, #42
; nextln: movz x7, #42
; nextln: sturb w8, [sp]
; nextln: ldr x8, 8 ; b 12 ; data
; nextln: blr x8
; nextln: add sp, sp, #16
; nextln: virtual_sp_offset_adjust -16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; mov x15, x0
; sub sp, sp, #16
; virtual_sp_offset_adjust 16
; movz x0, #42
; movz x1, #42
; movz x2, #42
; movz x3, #42
; movz x4, #42
; movz x5, #42
; movz x6, #42
; movz x7, #42
; strb w15, [sp]
; ldr x15, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x15
; add sp, sp, #16
; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16
; ret
function %f7(i8) -> i32, i32, i32, i32, i32, i32, i32, i32, i8 sext {
block0(v0: i8):
@@ -100,18 +142,19 @@ block0(v0: i8):
return v1, v1, v1, v1, v1, v1, v1, v1, v0
}
; check: mov x9, x0
; nextln: mov x8, x1
; nextln: movz x0, #42
; nextln: movz x1, #42
; nextln: movz x2, #42
; nextln: movz x3, #42
; nextln: movz x4, #42
; nextln: movz x5, #42
; nextln: movz x6, #42
; nextln: movz x7, #42
; nextln: sturb w9, [x8]
; nextln: ret
; block0:
; mov x14, x0
; mov x8, x1
; movz x0, #42
; movz x1, #42
; movz x2, #42
; movz x3, #42
; movz x4, #42
; movz x5, #42
; movz x6, #42
; movz x7, #42
; strb w14, [x8]
; ret
function %f8() {
fn0 = %g0() -> f32
@@ -131,32 +174,33 @@ block0:
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #48
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: add sp, sp, #48
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #48
; block0:
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x9
; str q0, [sp]
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x11
; str q0, [sp, #16]
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x13
; str q0, [sp, #32]
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x15
; ldr q0, [sp]
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x1
; ldr q0, [sp, #16]
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x3
; ldr q0, [sp, #32]
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; add sp, sp, #48
; ldp fp, lr, [sp], #16
; ret
function %f9() {
fn0 = %g0() -> i8x16
@@ -174,32 +218,33 @@ block0:
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #48
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: add sp, sp, #48
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #48
; block0:
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x9
; str q0, [sp]
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x11
; str q0, [sp, #16]
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x13
; str q0, [sp, #32]
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x15
; ldr q0, [sp]
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x1
; ldr q0, [sp, #16]
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x3
; ldr q0, [sp, #32]
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; add sp, sp, #48
; ldp fp, lr, [sp], #16
; ret
function %f10() {
fn0 = %g0() -> f32
@@ -221,44 +266,43 @@ block0:
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #48
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: str q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #16]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: ldr q0, [sp, #32]
; nextln: ldr x0, 8 ; b 12 ; data
; nextln: blr x0
; nextln: add sp, sp, #48
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #48
; block0:
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x9
; str q0, [sp]
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x11
; str q0, [sp, #16]
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x13
; str q0, [sp, #32]
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x15
; ldr q0, [sp]
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x1
; ldr q0, [sp, #16]
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x3
; ldr q0, [sp, #32]
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x5
; add sp, sp, #48
; ldp fp, lr, [sp], #16
; ret
; i128 tests
function %f11(i128, i64) -> i64 {
block0(v0: i128, v1: i64):
v2, v3 = isplit v0
return v3
}
; check: mov x0, x1
; nextln: ret
; block0:
; mov x0, x1
; ret
function %f11_call(i64) -> i64 {
fn0 = %f11(i128, i64) -> i64
@@ -270,28 +314,27 @@ block0(v0: i64):
return v3
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: mov x1, x0
; nextln: movz x0, #42
; nextln: movz x2, #42
; nextln: ldr x3, 8 ; b 12 ; data
; nextln: blr x3
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; mov x9, x0
; movz x0, #42
; mov x1, x9
; movz x2, #42
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x14
; ldp fp, lr, [sp], #16
; ret
; The AArch64 ABI requires that the i128 argument be aligned
; and to be passed in x2 and x3
function %f12(i64, i128) -> i64 {
block0(v0: i64, v1: i128):
v2, v3 = isplit v1
return v2
}
; check: mov x0, x2
; nextln: ret
; block0:
; mov x0, x2
; ret
function %f12_call(i64) -> i64 {
fn0 = %f12(i64, i128) -> i64
@@ -303,29 +346,26 @@ block0(v0: i64):
return v3
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz x3, #42
; nextln: mov x2, x0
; nextln: movz x0, #42
; nextln: ldr x1, 8 ; b 12 ; data
; nextln: blr x1
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; movz x3, #42
; mov x2, x0
; movz x0, #42
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x14
; ldp fp, lr, [sp], #16
; ret
; The Apple AArch64 ABI allows the i128 argument to not be aligned
; and to be passed in x1 and x2
function %f13(i64, i128) -> i64 apple_aarch64 {
block0(v0: i64, v1: i128):
v2, v3 = isplit v1
return v2
}
; check: mov x0, x1
; nextln: ret
; block0:
; mov x0, x1
; ret
function %f13_call(i64) -> i64 apple_aarch64 {
fn0 = %f13(i64, i128) -> i64 apple_aarch64
@@ -337,31 +377,29 @@ block0(v0: i64):
return v3
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz x2, #42
; nextln: mov x1, x0
; nextln: movz x0, #42
; nextln: ldr x3, 8 ; b 12 ; data
; nextln: blr x3
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; movz x2, #42
; mov x1, x0
; movz x0, #42
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x14
; ldp fp, lr, [sp], #16
; ret
; We only have 8 registers to pass data in
; make sure we spill the last argument even though there is one slot available
function %f14(i128, i128, i128, i64, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128, v3: i64, v4: i128):
return v4
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: ldur x0, [fp, #16]
; nextln: ldur x1, [fp, #24]
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; ldr x0, [fp, #16]
; ldr x1, [fp, #24]
; ldp fp, lr, [sp], #16
; ret
function %f14_call(i128, i64) -> i128 {
fn0 = %f14(i128, i128, i128, i64, i128) -> i128
@@ -371,50 +409,40 @@ block0(v0: i128, v1: i64):
return v2
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; mov x14, x2
; sub sp, sp, #16
; virtual_sp_offset_adjust 16
; mov x13, x0
; mov x15, x1
; mov x2, x13
; mov x3, x15
; mov x4, x13
; mov x5, x15
; mov x6, x14
; str x13, [sp]
; str x15, [sp, #8]
; ldr x7, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x7
; add sp, sp, #16
; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16
; ret
; TODO: Some codegen optimization possible here with x0,x1 moving to x7,x8 and then moving back
; nextln: mov x7, x0
; nextln: mov x8, x1
; nextln: mov x6, x2
; nextln: sub sp, sp, #16
; nextln: virtual_sp_offset_adjust 16
; nextln: mov x0, x7
; nextln: mov x1, x8
; nextln: mov x2, x7
; nextln: mov x3, x8
; nextln: mov x4, x7
; nextln: mov x5, x8
; nextln: stur x7, [sp]
; nextln: stur x8, [sp, #8]
; nextln: ldr x7, 8 ; b 12 ; data
; nextln: blr x7
; nextln: add sp, sp, #16
; nextln: virtual_sp_offset_adjust -16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; We have one register slot available (Similar to %f14), however apple
; allows us to start i128 on non even numbered registers (x7 in this case).
;
; It is unspecified if we can split the i128 into x7 + the stack.
; In practice LLVM does not do this, so we are going to go with that.
function %f15(i128, i128, i128, i64, i128) -> i128 apple_aarch64{
block0(v0: i128, v1: i128, v2: i128, v3: i64, v4: i128):
return v4
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: ldur x0, [fp, #16]
; nextln: ldur x1, [fp, #24]
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; ldr x0, [fp, #16]
; ldr x1, [fp, #24]
; ldp fp, lr, [sp], #16
; ret
function %f15_call(i128, i64) -> i128 apple_aarch64 {
fn0 = %f15(i128, i128, i128, i64, i128) -> i128 apple_aarch64
@@ -424,31 +452,27 @@ block0(v0: i128, v1: i64):
return v2
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: mov x7, x0
; nextln: mov x8, x1
; nextln: mov x6, x2
; nextln: sub sp, sp, #16
; nextln: virtual_sp_offset_adjust 16
; nextln: mov x0, x7
; nextln: mov x1, x8
; nextln: mov x2, x7
; nextln: mov x3, x8
; nextln: mov x4, x7
; nextln: mov x5, x8
; nextln: stur x7, [sp]
; nextln: stur x8, [sp, #8]
; nextln: ldr x7, 8 ; b 12 ; data
; nextln: blr x7
; nextln: add sp, sp, #16
; nextln: virtual_sp_offset_adjust -16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; block0:
; mov x14, x2
; sub sp, sp, #16
; virtual_sp_offset_adjust 16
; mov x13, x0
; mov x15, x1
; mov x2, x13
; mov x3, x15
; mov x4, x13
; mov x5, x15
; mov x6, x14
; str x13, [sp]
; str x15, [sp, #8]
; ldr x7, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x7
; add sp, sp, #16
; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16
; ret
function %f16() -> i32, i32 wasmtime_system_v {
block0:
@@ -457,9 +481,10 @@ block0:
return v0, v1
}
; check: mov x1, x0
; nextln: movz x0, #0
; nextln: movz x2, #1
; nextln: stur w2, [x1]
; nextln: ret
; block0:
; mov x11, x0
; movz x0, #0
; movz x7, #1
; str w7, [x11]
; ret

View File

@@ -10,14 +10,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmeq v0.16b, v0.16b, #0
; Inst 1: ret
; }}
; block0:
; cmeq v0.16b, v0.16b, #0
; ret
function %f1(i16x8) -> b16x8 {
block0(v0: i16x8):
@@ -27,14 +22,9 @@ block0(v0: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmeq v0.8h, v0.8h, #0
; Inst 1: ret
; }}
; block0:
; cmeq v0.8h, v0.8h, #0
; ret
function %f2(i32x4) -> b32x4 {
block0(v0: i32x4):
@@ -44,15 +34,10 @@ block0(v0: i32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: cmeq v0.4s, v0.4s, #0
; Inst 1: mvn v0.16b, v0.16b
; Inst 2: ret
; }}
; block0:
; cmeq v3.4s, v0.4s, #0
; mvn v0.16b, v3.16b
; ret
function %f3(i64x2) -> b64x2 {
block0(v0: i64x2):
@@ -62,15 +47,10 @@ block0(v0: i64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: cmeq v0.2d, v0.2d, #0
; Inst 1: mvn v0.16b, v0.16b
; Inst 2: ret
; }}
; block0:
; cmeq v3.2d, v0.2d, #0
; mvn v0.16b, v3.16b
; ret
function %f4(i8x16) -> b8x16 {
block0(v0: i8x16):
@@ -80,14 +60,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmle v0.16b, v0.16b, #0
; Inst 1: ret
; }}
; block0:
; cmle v0.16b, v0.16b, #0
; ret
function %f5(i16x8) -> b16x8 {
block0(v0: i16x8):
@@ -97,14 +72,9 @@ block0(v0: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmge v0.8h, v0.8h, #0
; Inst 1: ret
; }}
; block0:
; cmge v0.8h, v0.8h, #0
; ret
function %f6(i32x4) -> b32x4 {
block0(v0: i32x4):
@@ -114,14 +84,9 @@ block0(v0: i32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmge v0.4s, v0.4s, #0
; Inst 1: ret
; }}
; block0:
; cmge v0.4s, v0.4s, #0
; ret
function %f7(i64x2) -> b64x2 {
block0(v0: i64x2):
@@ -131,14 +96,9 @@ block0(v0: i64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmle v0.2d, v0.2d, #0
; Inst 1: ret
; }}
; block0:
; cmle v0.2d, v0.2d, #0
; ret
function %f8(i8x16) -> b8x16 {
block0(v0: i8x16):
@@ -148,14 +108,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmlt v0.16b, v0.16b, #0
; Inst 1: ret
; }}
; block0:
; cmlt v0.16b, v0.16b, #0
; ret
function %f9(i16x8) -> b16x8 {
block0(v0: i16x8):
@@ -165,14 +120,9 @@ block0(v0: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmgt v0.8h, v0.8h, #0
; Inst 1: ret
; }}
; block0:
; cmgt v0.8h, v0.8h, #0
; ret
function %f10(i32x4) -> b32x4 {
block0(v0: i32x4):
@@ -182,14 +132,9 @@ block0(v0: i32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmgt v0.4s, v0.4s, #0
; Inst 1: ret
; }}
; block0:
; cmgt v0.4s, v0.4s, #0
; ret
function %f11(i64x2) -> b64x2 {
block0(v0: i64x2):
@@ -199,14 +144,9 @@ block0(v0: i64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: cmlt v0.2d, v0.2d, #0
; Inst 1: ret
; }}
; block0:
; cmlt v0.2d, v0.2d, #0
; ret
function %f12(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -216,14 +156,9 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmeq v0.4s, v0.4s, #0.0
; Inst 1: ret
; }}
; block0:
; fcmeq v0.4s, v0.4s, #0.0
; ret
function %f13(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -233,14 +168,9 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmeq v0.2d, v0.2d, #0.0
; Inst 1: ret
; }}
; block0:
; fcmeq v0.2d, v0.2d, #0.0
; ret
function %f14(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -250,15 +180,10 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: fcmeq v0.2d, v0.2d, #0.0
; Inst 1: mvn v0.16b, v0.16b
; Inst 2: ret
; }}
; block0:
; fcmeq v3.2d, v0.2d, #0.0
; mvn v0.16b, v3.16b
; ret
function %f15(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -268,15 +193,10 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: fcmeq v0.4s, v0.4s, #0.0
; Inst 1: mvn v0.16b, v0.16b
; Inst 2: ret
; }}
; block0:
; fcmeq v3.4s, v0.4s, #0.0
; mvn v0.16b, v3.16b
; ret
function %f16(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -286,14 +206,9 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmle v0.4s, v0.4s, #0.0
; Inst 1: ret
; }}
; block0:
; fcmle v0.4s, v0.4s, #0.0
; ret
function %f17(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -303,14 +218,9 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmge v0.2d, v0.2d, #0.0
; Inst 1: ret
; }}
; block0:
; fcmge v0.2d, v0.2d, #0.0
; ret
function %f18(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -320,14 +230,9 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmge v0.2d, v0.2d, #0.0
; Inst 1: ret
; }}
; block0:
; fcmge v0.2d, v0.2d, #0.0
; ret
function %f19(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -337,14 +242,9 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmle v0.4s, v0.4s, #0.0
; Inst 1: ret
; }}
; block0:
; fcmle v0.4s, v0.4s, #0.0
; ret
function %f20(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -354,14 +254,9 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmlt v0.4s, v0.4s, #0.0
; Inst 1: ret
; }}
; block0:
; fcmlt v0.4s, v0.4s, #0.0
; ret
function %f21(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -371,14 +266,9 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmgt v0.2d, v0.2d, #0.0
; Inst 1: ret
; }}
; block0:
; fcmgt v0.2d, v0.2d, #0.0
; ret
function %f22(f64x2) -> b64x2 {
block0(v0: f64x2):
@@ -388,14 +278,9 @@ block0(v0: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmgt v0.2d, v0.2d, #0.0
; Inst 1: ret
; }}
; block0:
; fcmgt v0.2d, v0.2d, #0.0
; ret
function %f23(f32x4) -> b32x4 {
block0(v0: f32x4):
@@ -405,11 +290,7 @@ block0(v0: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fcmlt v0.4s, v0.4s, #0.0
; Inst 1: ret
; }}
; block0:
; fcmlt v0.4s, v0.4s, #0.0
; ret

View File

@@ -8,15 +8,10 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs xzr, x0, x1
; Inst 1: cset x0, eq
; Inst 2: ret
; }}
; block0:
; subs xzr, x0, x1
; cset x0, eq
; ret
function %icmp_eq_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -24,17 +19,12 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: eor x0, x0, x2
; Inst 1: eor x1, x1, x3
; Inst 2: adds xzr, x0, x1
; Inst 3: cset x0, eq
; Inst 4: ret
; }}
; block0:
; eor x10, x0, x2
; eor x12, x1, x3
; adds xzr, x10, x12
; cset x0, eq
; ret
function %icmp_ne_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -42,17 +32,12 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: eor x0, x0, x2
; Inst 1: eor x1, x1, x3
; Inst 2: adds xzr, x0, x1
; Inst 3: cset x0, ne
; Inst 4: ret
; }}
; block0:
; eor x10, x0, x2
; eor x12, x1, x3
; adds xzr, x10, x12
; cset x0, ne
; ret
function %icmp_slt_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -60,18 +45,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, lo
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, lt
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, lo
; subs xzr, x1, x3
; cset x14, lt
; csel x0, x11, x14, eq
; ret
function %icmp_ult_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -79,18 +59,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, lo
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, lo
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, lo
; subs xzr, x1, x3
; cset x14, lo
; csel x0, x11, x14, eq
; ret
function %icmp_sle_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -98,18 +73,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, ls
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, le
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, ls
; subs xzr, x1, x3
; cset x14, le
; csel x0, x11, x14, eq
; ret
function %icmp_ule_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -117,18 +87,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, ls
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, ls
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, ls
; subs xzr, x1, x3
; cset x14, ls
; csel x0, x11, x14, eq
; ret
function %icmp_sgt_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -136,18 +101,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hi
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, gt
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, hi
; subs xzr, x1, x3
; cset x14, gt
; csel x0, x11, x14, eq
; ret
function %icmp_ugt_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -155,18 +115,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hi
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, hi
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, hi
; subs xzr, x1, x3
; cset x14, hi
; csel x0, x11, x14, eq
; ret
function %icmp_sge_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -174,18 +129,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hs
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, ge
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, hs
; subs xzr, x1, x3
; cset x14, ge
; csel x0, x11, x14, eq
; ret
function %icmp_uge_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -193,18 +143,13 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hs
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, hs
; Inst 4: csel x0, x0, x1, eq
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x11, hs
; subs xzr, x1, x3
; cset x14, hs
; csel x0, x11, x14, eq
; ret
function %icmp_of_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -212,16 +157,11 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: adds xzr, x0, x2
; Inst 1: adcs xzr, x1, x3
; Inst 2: cset x0, vs
; Inst 3: ret
; }}
; block0:
; adds xzr, x0, x2
; adcs xzr, x1, x3
; cset x0, vs
; ret
function %icmp_nof_i128(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
@@ -229,16 +169,11 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: adds xzr, x0, x2
; Inst 1: adcs xzr, x1, x3
; Inst 2: cset x0, vc
; Inst 3: ret
; }}
; block0:
; adds xzr, x0, x2
; adcs xzr, x1, x3
; cset x0, vc
; ret
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -255,26 +190,15 @@ block2:
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 2)
; Inst 0: subs xzr, x0, x1
; Inst 1: b.eq label1 ; b label2
; Block 1:
; (original IR block: block1)
; (instruction range: 2 .. 4)
; Inst 2: movz x0, #1
; Inst 3: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 4 .. 6)
; Inst 4: movz x0, #2
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x1
; b.eq label1 ; b label2
; block1:
; movz x0, #1
; ret
; block2:
; movz x0, #2
; ret
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -287,29 +211,16 @@ block1:
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 2)
; Inst 0: subs xzr, x0, x1
; Inst 1: b.eq label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 2 .. 3)
; Inst 2: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 3 .. 4)
; Inst 3: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 4 .. 6)
; Inst 4: movz x0, #1
; Inst 5: ret
; }}
; block0:
; subs xzr, x0, x1
; b.eq label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; movz x0, #1
; ret
function %i128_brz(i128){
block0(v0: i128):
@@ -321,28 +232,15 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 2)
; Inst 0: orr x0, x0, x1
; Inst 1: cbz x0, label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 2 .. 3)
; Inst 2: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 3 .. 4)
; Inst 3: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 4 .. 5)
; Inst 4: ret
; }}
; block0:
; orr x4, x0, x1
; cbz x4, label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_brnz(i128){
block0(v0: i128):
@@ -354,28 +252,15 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 2)
; Inst 0: orr x0, x0, x1
; Inst 1: cbnz x0, label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 2 .. 3)
; Inst 2: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 3 .. 4)
; Inst 3: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 4 .. 5)
; Inst 4: ret
; }}
; block0:
; orr x4, x0, x1
; cbnz x4, label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_eq(i128, i128) {
block0(v0: i128, v1: i128):
@@ -386,30 +271,17 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: eor x0, x0, x2
; Inst 1: eor x1, x1, x3
; Inst 2: adds xzr, x0, x1
; Inst 3: b.eq label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 4 .. 5)
; Inst 4: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 5 .. 6)
; Inst 5: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 6 .. 7)
; Inst 6: ret
; }}
; block0:
; eor x8, x0, x2
; eor x10, x1, x3
; adds xzr, x8, x10
; b.eq label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_ne(i128, i128) {
block0(v0: i128, v1: i128):
@@ -420,30 +292,17 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: eor x0, x0, x2
; Inst 1: eor x1, x1, x3
; Inst 2: adds xzr, x0, x1
; Inst 3: b.ne label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 4 .. 5)
; Inst 4: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 5 .. 6)
; Inst 5: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 6 .. 7)
; Inst 6: ret
; }}
; block0:
; eor x8, x0, x2
; eor x10, x1, x3
; adds xzr, x8, x10
; b.ne label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_slt(i128, i128) {
block0(v0: i128, v1: i128):
@@ -454,33 +313,20 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 7)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, lo
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, lt
; Inst 4: csel x0, x0, x1, eq
; Inst 5: subs xzr, xzr, x0
; Inst 6: b.lt label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 7 .. 8)
; Inst 7: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 9 .. 10)
; Inst 9: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, lo
; subs xzr, x1, x3
; cset x12, lt
; csel x9, x9, x12, eq
; subs xzr, xzr, x9
; b.lt label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_ult(i128, i128) {
block0(v0: i128, v1: i128):
@@ -491,33 +337,20 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 7)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, lo
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, lo
; Inst 4: csel x0, x0, x1, eq
; Inst 5: subs xzr, xzr, x0
; Inst 6: b.lo label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 7 .. 8)
; Inst 7: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 9 .. 10)
; Inst 9: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, lo
; subs xzr, x1, x3
; cset x12, lo
; csel x9, x9, x12, eq
; subs xzr, xzr, x9
; b.lo label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_sle(i128, i128) {
block0(v0: i128, v1: i128):
@@ -528,34 +361,21 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, ls
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, le
; Inst 4: csel x0, x0, x1, eq
; Inst 5: movz x1, #1
; Inst 6: subs xzr, x1, x0
; Inst 7: b.le label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 9 .. 10)
; Inst 9: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 10 .. 11)
; Inst 10: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, ls
; subs xzr, x1, x3
; cset x12, le
; csel x9, x9, x12, eq
; movz x12, #1
; subs xzr, x12, x9
; b.le label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_ule(i128, i128) {
block0(v0: i128, v1: i128):
@@ -566,34 +386,21 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, ls
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, ls
; Inst 4: csel x0, x0, x1, eq
; Inst 5: movz x1, #1
; Inst 6: subs xzr, x1, x0
; Inst 7: b.ls label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 9 .. 10)
; Inst 9: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 10 .. 11)
; Inst 10: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, ls
; subs xzr, x1, x3
; cset x12, ls
; csel x9, x9, x12, eq
; movz x12, #1
; subs xzr, x12, x9
; b.ls label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_sgt(i128, i128) {
block0(v0: i128, v1: i128):
@@ -604,33 +411,20 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 7)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hi
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, gt
; Inst 4: csel x0, x0, x1, eq
; Inst 5: subs xzr, x0, xzr
; Inst 6: b.gt label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 7 .. 8)
; Inst 7: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 9 .. 10)
; Inst 9: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, hi
; subs xzr, x1, x3
; cset x12, gt
; csel x9, x9, x12, eq
; subs xzr, x9, xzr
; b.gt label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_ugt(i128, i128) {
block0(v0: i128, v1: i128):
@@ -641,33 +435,20 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 7)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hi
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, hi
; Inst 4: csel x0, x0, x1, eq
; Inst 5: subs xzr, x0, xzr
; Inst 6: b.hi label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 7 .. 8)
; Inst 7: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 9 .. 10)
; Inst 9: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, hi
; subs xzr, x1, x3
; cset x12, hi
; csel x9, x9, x12, eq
; subs xzr, x9, xzr
; b.hi label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_sge(i128, i128) {
block0(v0: i128, v1: i128):
@@ -678,34 +459,21 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hs
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, ge
; Inst 4: csel x0, x0, x1, eq
; Inst 5: movz x1, #1
; Inst 6: subs xzr, x0, x1
; Inst 7: b.ge label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 9 .. 10)
; Inst 9: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 10 .. 11)
; Inst 10: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, hs
; subs xzr, x1, x3
; cset x12, ge
; csel x9, x9, x12, eq
; movz x12, #1
; subs xzr, x9, x12
; b.ge label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_uge(i128, i128) {
block0(v0: i128, v1: i128):
@@ -716,34 +484,21 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: subs xzr, x0, x2
; Inst 1: cset x0, hs
; Inst 2: subs xzr, x1, x3
; Inst 3: cset x1, hs
; Inst 4: csel x0, x0, x1, eq
; Inst 5: movz x1, #1
; Inst 6: subs xzr, x0, x1
; Inst 7: b.hs label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 8 .. 9)
; Inst 8: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 9 .. 10)
; Inst 9: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 10 .. 11)
; Inst 10: ret
; }}
; block0:
; subs xzr, x0, x2
; cset x9, hs
; subs xzr, x1, x3
; cset x12, hs
; csel x9, x9, x12, eq
; movz x12, #1
; subs xzr, x9, x12
; b.hs label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_of(i128, i128) {
block0(v0: i128, v1: i128):
@@ -754,29 +509,16 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 3)
; Inst 0: adds xzr, x0, x2
; Inst 1: adcs xzr, x1, x3
; Inst 2: b.vs label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 3 .. 4)
; Inst 3: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 4 .. 5)
; Inst 4: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 5 .. 6)
; Inst 5: ret
; }}
; block0:
; adds xzr, x0, x2
; adcs xzr, x1, x3
; b.vs label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret
function %i128_bricmp_nof(i128, i128) {
block0(v0: i128, v1: i128):
@@ -787,27 +529,14 @@ block1:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 3)
; Inst 0: adds xzr, x0, x2
; Inst 1: adcs xzr, x1, x3
; Inst 2: b.vc label1 ; b label2
; Block 1:
; (successor: Block 3)
; (instruction range: 3 .. 4)
; Inst 3: b label3
; Block 2:
; (successor: Block 3)
; (instruction range: 4 .. 5)
; Inst 4: b label3
; Block 3:
; (original IR block: block1)
; (instruction range: 5 .. 6)
; Inst 5: ret
; }}
; block0:
; adds xzr, x0, x2
; adcs xzr, x1, x3
; b.vc label1 ; b label2
; block1:
; b label3
; block2:
; b label3
; block3:
; ret

View File

@@ -10,16 +10,11 @@ block0(v0: i8, v1: i64, v2: i64):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxtb w0, w0
; Inst 1: subs wzr, w0, #42
; Inst 2: csel x0, x1, x2, eq
; Inst 3: ret
; }}
; block0:
; uxtb w8, w0
; subs wzr, w8, #42
; csel x0, x1, x2, eq
; ret
function %g(i8) -> b1 {
block0(v0: i8):
@@ -29,16 +24,11 @@ block0(v0: i8):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxtb w0, w0
; Inst 1: subs wzr, w0, #42
; Inst 2: cset x0, eq
; Inst 3: ret
; }}
; block0:
; uxtb w4, w0
; subs wzr, w4, #42
; cset x0, eq
; ret
function %h(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
@@ -46,16 +36,11 @@ block0(v0: i8, v1: i8, v2: i8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: and x1, x1, x0
; Inst 1: bic x0, x2, x0
; Inst 2: orr x0, x0, x1
; Inst 3: ret
; }}
; block0:
; and x8, x1, x0
; bic x0, x2, x0
; orr x0, x0, x8
; ret
function %i(b1, i8, i8) -> i8 {
block0(v0: b1, v1: i8, v2: i8):
@@ -63,16 +48,11 @@ block0(v0: b1, v1: i8, v2: i8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: and w0, w0, #1
; Inst 1: subs wzr, w0, wzr
; Inst 2: csel x0, x1, x2, ne
; Inst 3: ret
; }}
; block0:
; and w8, w0, #1
; subs wzr, w8, wzr
; csel x0, x1, x2, ne
; ret
function %i(i32, i8, i8) -> i8 {
block0(v0: i32, v1: i8, v2: i8):
@@ -82,15 +62,10 @@ block0(v0: i32, v1: i8, v2: i8):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs wzr, w0, #42
; Inst 1: csel x0, x1, x2, eq
; Inst 2: ret
; }}
; block0:
; subs wzr, w0, #42
; csel x0, x1, x2, eq
; ret
function %i128_select(b1, i128, i128) -> i128 {
block0(v0: b1, v1: i128, v2: i128):
@@ -98,15 +73,10 @@ block0(v0: b1, v1: i128, v2: i128):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: and w0, w0, #1
; Inst 1: subs wzr, w0, wzr
; Inst 2: csel x0, x2, x4, ne
; Inst 3: csel x1, x3, x5, ne
; Inst 4: ret
; }}
; block0:
; and w14, w0, #1
; subs wzr, w14, wzr
; csel x0, x2, x4, ne
; csel x1, x3, x5, ne
; ret

View File

@@ -8,14 +8,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #255
; Inst 1: ret
; }}
; block0:
; movz x0, #255
; ret
function %f() -> b16 {
block0:
@@ -23,14 +18,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #0
; Inst 1: ret
; }}
; block0:
; movz x0, #0
; ret
function %f() -> i64 {
block0:
@@ -38,14 +28,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #0
; Inst 1: ret
; }}
; block0:
; movz x0, #0
; ret
function %f() -> i64 {
block0:
@@ -53,14 +38,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #65535
; Inst 1: ret
; }}
; block0:
; movz x0, #65535
; ret
function %f() -> i64 {
block0:
@@ -68,14 +48,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #65535, LSL #16
; Inst 1: ret
; }}
; block0:
; movz x0, #65535, LSL #16
; ret
function %f() -> i64 {
block0:
@@ -83,14 +58,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #65535, LSL #32
; Inst 1: ret
; }}
; block0:
; movz x0, #65535, LSL #32
; ret
function %f() -> i64 {
block0:
@@ -98,14 +68,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #65535, LSL #48
; Inst 1: ret
; }}
; block0:
; movz x0, #65535, LSL #48
; ret
function %f() -> i64 {
block0:
@@ -113,14 +78,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #0
; Inst 1: ret
; }}
; block0:
; movn x0, #0
; ret
function %f() -> i64 {
block0:
@@ -128,14 +88,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #65535
; Inst 1: ret
; }}
; block0:
; movn x0, #65535
; ret
function %f() -> i64 {
block0:
@@ -143,14 +98,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #65535, LSL #16
; Inst 1: ret
; }}
; block0:
; movn x0, #65535, LSL #16
; ret
function %f() -> i64 {
block0:
@@ -158,14 +108,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #65535, LSL #32
; Inst 1: ret
; }}
; block0:
; movn x0, #65535, LSL #32
; ret
function %f() -> i64 {
block0:
@@ -173,14 +118,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #65535, LSL #48
; Inst 1: ret
; }}
; block0:
; movn x0, #65535, LSL #48
; ret
function %f() -> i64 {
block0:
@@ -188,17 +128,12 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: movz x0, #58
; Inst 1: movk x0, #4626, LSL #16
; Inst 2: movk x0, #61603, LSL #32
; Inst 3: movk x0, #62283, LSL #48
; Inst 4: ret
; }}
; block0:
; movz x0, #58
; movk x0, #4626, LSL #16
; movk x0, #61603, LSL #32
; movk x0, #62283, LSL #48
; ret
function %f() -> i64 {
block0:
@@ -206,15 +141,10 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #7924, LSL #16
; Inst 1: movk x0, #4841, LSL #48
; Inst 2: ret
; }}
; block0:
; movz x0, #7924, LSL #16
; movk x0, #4841, LSL #48
; ret
function %f() -> i64 {
block0:
@@ -222,15 +152,10 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movn x0, #57611, LSL #16
; Inst 1: movk x0, #4841, LSL #48
; Inst 2: ret
; }}
; block0:
; movn x0, #57611, LSL #16
; movk x0, #4841, LSL #48
; ret
function %f() -> i32 {
block0:
@@ -238,14 +163,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: orr x0, xzr, #4294967295
; Inst 1: ret
; }}
; block0:
; orr x0, xzr, #4294967295
; ret
function %f() -> i32 {
block0:
@@ -253,14 +173,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn w0, #8
; Inst 1: ret
; }}
; block0:
; movn w0, #8
; ret
function %f() -> i64 {
block0:
@@ -268,14 +183,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn w0, #8
; Inst 1: ret
; }}
; block0:
; movn w0, #8
; ret
function %f() -> i64 {
block0:
@@ -283,14 +193,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movn x0, #8
; Inst 1: ret
; }}
; block0:
; movn x0, #8
; ret
function %f() -> f64 {
block0:
@@ -298,14 +203,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fmov d0, #1
; Inst 1: ret
; }}
; block0:
; fmov d0, #1
; ret
function %f() -> f32 {
block0:
@@ -313,14 +213,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fmov s0, #5
; Inst 1: ret
; }}
; block0:
; fmov s0, #5
; ret
function %f() -> f64 {
block0:
@@ -328,15 +223,10 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #16457, LSL #48
; Inst 1: fmov d0, x0
; Inst 2: ret
; }}
; block0:
; movz x2, #16457, LSL #48
; fmov d0, x2
; ret
function %f() -> f32 {
block0:
@@ -344,15 +234,10 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #16968, LSL #16
; Inst 1: fmov s0, w0
; Inst 2: ret
; }}
; block0:
; movz x2, #16968, LSL #16
; fmov s0, w2
; ret
function %f() -> f64 {
block0:
@@ -360,14 +245,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movi v0.2s, #0
; Inst 1: ret
; }}
; block0:
; movi v0.2s, #0
; ret
function %f() -> f32 {
block0:
@@ -375,14 +255,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movi v0.2s, #0
; Inst 1: ret
; }}
; block0:
; movi v0.2s, #0
; ret
function %f() -> f64 {
block0:
@@ -390,14 +265,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fmov d0, #-16
; Inst 1: ret
; }}
; block0:
; fmov d0, #-16
; ret
function %f() -> f32 {
block0:
@@ -405,11 +275,7 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fmov s0, #-16
; Inst 1: ret
; }}
; block0:
; fmov s0, #-16
; ret

View File

@@ -10,15 +10,10 @@ block0(v0: i8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxtb x0, w0
; Inst 1: add x0, x0, #42
; Inst 2: ret
; }}
; block0:
; sxtb x4, w0
; add x0, x4, #42
; ret
function %f2(i8, i64) -> i64 {
block0(v0: i8, v1: i64):
@@ -27,14 +22,9 @@ block0(v0: i8, v1: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add x0, x1, x0, SXTB
; Inst 1: ret
; }}
; block0:
; add x0, x1, x0, SXTB
; ret
function %i128_uextend_i64(i64) -> i128 {
block0(v0: i64):
@@ -42,14 +32,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x1, #0
; Inst 1: ret
; }}
; block0:
; movz x1, #0
; ret
function %i128_sextend_i64(i64) -> i128 {
block0(v0: i64):
@@ -57,14 +42,9 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: asr x1, x0, #63
; Inst 1: ret
; }}
; block0:
; asr x1, x0, #63
; ret
function %i128_uextend_i32(i32) -> i128 {
block0(v0: i32):
@@ -72,15 +52,10 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: mov w0, w0
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; mov w0, w0
; movz x1, #0
; ret
function %i128_sextend_i32(i32) -> i128 {
block0(v0: i32):
@@ -88,15 +63,10 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxtw x0, w0
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; sxtw x0, w0
; asr x1, x0, #63
; ret
function %i128_uextend_i16(i16) -> i128 {
block0(v0: i16):
@@ -104,15 +74,10 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxth w0, w0
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; uxth w0, w0
; movz x1, #0
; ret
function %i128_sextend_i16(i16) -> i128 {
block0(v0: i16):
@@ -120,15 +85,10 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxth x0, w0
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; sxth x0, w0
; asr x1, x0, #63
; ret
function %i128_uextend_i8(i8) -> i128 {
block0(v0: i8):
@@ -136,15 +96,10 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxtb w0, w0
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; uxtb w0, w0
; movz x1, #0
; ret
function %i128_sextend_i8(i8) -> i128 {
block0(v0: i8):
@@ -152,15 +107,10 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sxtb x0, w0
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; sxtb x0, w0
; asr x1, x0, #63
; ret
function %i8x16_uextend_i16(i8x16) -> i16 {
block0(v0: i8x16):
@@ -169,14 +119,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umov w0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; umov w0, v0.b[1]
; ret
function %i8x16_uextend_i32(i8x16) -> i32 {
block0(v0: i8x16):
@@ -185,14 +130,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umov w0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; umov w0, v0.b[1]
; ret
function %i8x16_uextend_i64(i8x16) -> i64 {
block0(v0: i8x16):
@@ -201,14 +141,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umov w0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; umov w0, v0.b[1]
; ret
function %i8x16_uextend_i128(i8x16) -> i128 {
block0(v0: i8x16):
@@ -217,15 +152,10 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: umov w0, v0.b[1]
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; umov w0, v0.b[1]
; movz x1, #0
; ret
function %i8x16_sextend_i16(i8x16) -> i16 {
block0(v0: i8x16):
@@ -234,14 +164,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov w0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; smov w0, v0.b[1]
; ret
function %i8x16_sextend_i32(i8x16) -> i32 {
block0(v0: i8x16):
@@ -250,14 +175,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov w0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; smov w0, v0.b[1]
; ret
function %i8x16_sextend_i64(i8x16) -> i64 {
block0(v0: i8x16):
@@ -266,14 +186,9 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov x0, v0.b[1]
; Inst 1: ret
; }}
; block0:
; smov x0, v0.b[1]
; ret
function %i8x16_sextend_i128(i8x16) -> i128 {
block0(v0: i8x16):
@@ -282,15 +197,10 @@ block0(v0: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: smov x0, v0.b[1]
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; smov x0, v0.b[1]
; asr x1, x0, #63
; ret
function %i16x8_uextend_i32(i16x8) -> i32 {
block0(v0: i16x8):
@@ -299,14 +209,9 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umov w0, v0.h[1]
; Inst 1: ret
; }}
; block0:
; umov w0, v0.h[1]
; ret
function %i16x8_uextend_i64(i16x8) -> i64 {
block0(v0: i16x8):
@@ -315,14 +220,9 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umov w0, v0.h[1]
; Inst 1: ret
; }}
; block0:
; umov w0, v0.h[1]
; ret
function %i16x8_uextend_i128(i16x8) -> i128 {
block0(v0: i16x8):
@@ -331,15 +231,10 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: umov w0, v0.h[1]
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; umov w0, v0.h[1]
; movz x1, #0
; ret
function %i16x8_sextend_i32(i16x8) -> i32 {
block0(v0: i16x8):
@@ -348,14 +243,9 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov w0, v0.h[1]
; Inst 1: ret
; }}
; block0:
; smov w0, v0.h[1]
; ret
function %i16x8_sextend_i64(i16x8) -> i64 {
block0(v0: i16x8):
@@ -364,14 +254,9 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov x0, v0.h[1]
; Inst 1: ret
; }}
; block0:
; smov x0, v0.h[1]
; ret
function %i16x8_sextend_i128(i16x8) -> i128 {
block0(v0: i16x8):
@@ -380,15 +265,10 @@ block0(v0: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: smov x0, v0.h[1]
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; smov x0, v0.h[1]
; asr x1, x0, #63
; ret
function %i32x4_uextend_i64(i32x4) -> i64 {
block0(v0: i32x4):
@@ -397,14 +277,9 @@ block0(v0: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: mov w0, v0.s[1]
; Inst 1: ret
; }}
; block0:
; mov w0, v0.s[1]
; ret
function %i32x4_uextend_i128(i32x4) -> i128 {
block0(v0: i32x4):
@@ -413,15 +288,10 @@ block0(v0: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: mov w0, v0.s[1]
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; mov w0, v0.s[1]
; movz x1, #0
; ret
function %i32x4_sextend_i64(i32x4) -> i64 {
block0(v0: i32x4):
@@ -430,14 +300,9 @@ block0(v0: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smov x0, v0.s[1]
; Inst 1: ret
; }}
; block0:
; smov x0, v0.s[1]
; ret
function %i32x4_sextend_i128(i32x4) -> i128 {
block0(v0: i32x4):
@@ -446,15 +311,10 @@ block0(v0: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: smov x0, v0.s[1]
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; smov x0, v0.s[1]
; asr x1, x0, #63
; ret
function %i64x2_uextend_i128(i64x2) -> i128 {
block0(v0: i64x2):
@@ -463,15 +323,10 @@ block0(v0: i64x2):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: mov x0, v0.d[1]
; Inst 1: movz x1, #0
; Inst 2: ret
; }}
; block0:
; mov x0, v0.d[1]
; movz x1, #0
; ret
function %i64x2_sextend_i128(i64x2) -> i128 {
block0(v0: i64x2):
@@ -480,13 +335,8 @@ block0(v0: i64x2):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: mov x0, v0.d[1]
; Inst 1: asr x1, x0, #63
; Inst 2: ret
; }}
; block0:
; mov x0, v0.d[1]
; asr x1, x0, #63
; ret

View File

@@ -8,15 +8,10 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxtb w0, w0
; Inst 1: ucvtf s0, w0
; Inst 2: ret
; }}
; block0:
; uxtb w4, w0
; ucvtf s0, w4
; ret
function u0:0(i8) -> f64 {
block0(v0: i8):
@@ -24,15 +19,10 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxtb w0, w0
; Inst 1: ucvtf d0, w0
; Inst 2: ret
; }}
; block0:
; uxtb w4, w0
; ucvtf d0, w4
; ret
function u0:0(i16) -> f32 {
block0(v0: i16):
@@ -40,15 +30,10 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxth w0, w0
; Inst 1: ucvtf s0, w0
; Inst 2: ret
; }}
; block0:
; uxth w4, w0
; ucvtf s0, w4
; ret
function u0:0(i16) -> f64 {
block0(v0: i16):
@@ -56,15 +41,10 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: uxth w0, w0
; Inst 1: ucvtf d0, w0
; Inst 2: ret
; }}
; block0:
; uxth w4, w0
; ucvtf d0, w4
; ret
function u0:0(f32) -> i8 {
block0(v0: f32):
@@ -72,23 +52,18 @@ block0(v0: f32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: fcmp s0, s0
; Inst 1: b.vc 8 ; udf
; Inst 2: fmov s1, #-1
; Inst 3: fcmp s0, s1
; Inst 4: b.gt 8 ; udf
; Inst 5: movz x0, #17280, LSL #16
; Inst 6: fmov s1, w0
; Inst 7: fcmp s0, s1
; Inst 8: b.mi 8 ; udf
; Inst 9: fcvtzu w0, s0
; Inst 10: ret
; }}
; block0:
; fcmp s0, s0
; b.vc 8 ; udf
; fmov s6, #-1
; fcmp s0, s6
; b.gt 8 ; udf
; movz x10, #17280, LSL #16
; fmov s6, w10
; fcmp s0, s6
; b.mi 8 ; udf
; fcvtzu w0, s0
; ret
function u0:0(f64) -> i8 {
block0(v0: f64):
@@ -96,23 +71,18 @@ block0(v0: f64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: fcmp d0, d0
; Inst 1: b.vc 8 ; udf
; Inst 2: fmov d1, #-1
; Inst 3: fcmp d0, d1
; Inst 4: b.gt 8 ; udf
; Inst 5: movz x0, #16496, LSL #48
; Inst 6: fmov d1, x0
; Inst 7: fcmp d0, d1
; Inst 8: b.mi 8 ; udf
; Inst 9: fcvtzu w0, d0
; Inst 10: ret
; }}
; block0:
; fcmp d0, d0
; b.vc 8 ; udf
; fmov d6, #-1
; fcmp d0, d6
; b.gt 8 ; udf
; movz x10, #16496, LSL #48
; fmov d6, x10
; fcmp d0, d6
; b.mi 8 ; udf
; fcvtzu w0, d0
; ret
function u0:0(f32) -> i16 {
block0(v0: f32):
@@ -120,23 +90,18 @@ block0(v0: f32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: fcmp s0, s0
; Inst 1: b.vc 8 ; udf
; Inst 2: fmov s1, #-1
; Inst 3: fcmp s0, s1
; Inst 4: b.gt 8 ; udf
; Inst 5: movz x0, #18304, LSL #16
; Inst 6: fmov s1, w0
; Inst 7: fcmp s0, s1
; Inst 8: b.mi 8 ; udf
; Inst 9: fcvtzu w0, s0
; Inst 10: ret
; }}
; block0:
; fcmp s0, s0
; b.vc 8 ; udf
; fmov s6, #-1
; fcmp s0, s6
; b.gt 8 ; udf
; movz x10, #18304, LSL #16
; fmov s6, w10
; fcmp s0, s6
; b.mi 8 ; udf
; fcvtzu w0, s0
; ret
function u0:0(f64) -> i16 {
block0(v0: f64):
@@ -144,21 +109,16 @@ block0(v0: f64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: fcmp d0, d0
; Inst 1: b.vc 8 ; udf
; Inst 2: fmov d1, #-1
; Inst 3: fcmp d0, d1
; Inst 4: b.gt 8 ; udf
; Inst 5: movz x0, #16624, LSL #48
; Inst 6: fmov d1, x0
; Inst 7: fcmp d0, d1
; Inst 8: b.mi 8 ; udf
; Inst 9: fcvtzu w0, d0
; Inst 10: ret
; }}
; block0:
; fcmp d0, d0
; b.vc 8 ; udf
; fmov d6, #-1
; fcmp d0, d6
; b.gt 8 ; udf
; movz x10, #16624, LSL #48
; fmov d6, x10
; fcmp d0, d6
; b.mi 8 ; udf
; fcvtzu w0, d0
; ret

File diff suppressed because it is too large Load Diff

View File

@@ -13,31 +13,20 @@ block0(v0: i64, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 5)
; Inst 0: mov w2, w1
; Inst 1: ldr x3, [x0]
; Inst 2: mov x3, x3
; Inst 3: subs xzr, x2, x3
; Inst 4: b.ls label1 ; b label2
; Block 1:
; (original IR block: block2)
; (instruction range: 5 .. 10)
; Inst 5: add x0, x0, x1, UXTW
; Inst 6: subs xzr, x2, x3
; Inst 7: movz x1, #0
; Inst 8: csel x0, x1, x0, hi
; Inst 9: ret
; Block 2:
; (original IR block: block1)
; (instruction range: 10 .. 11)
; Inst 10: udf
; }}
; block0:
; mov w10, w1
; ldr x5, [x0]
; mov x11, x5
; subs xzr, x10, x11
; b.ls label1 ; b label2
; block1:
; add x13, x0, x1, UXTW
; subs xzr, x10, x11
; movz x14, #0
; csel x0, x14, x13, hi
; ret
; block2:
; udf
function %static_heap_check(i64 vmctx, i32) -> i64 {
gv0 = vmctx
@@ -48,27 +37,16 @@ block0(v0: i64, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 3)
; Inst 0: mov w2, w1
; Inst 1: subs xzr, x2, #65536
; Inst 2: b.ls label1 ; b label2
; Block 1:
; (original IR block: block2)
; (instruction range: 3 .. 8)
; Inst 3: add x0, x0, x1, UXTW
; Inst 4: subs xzr, x2, #65536
; Inst 5: movz x1, #0
; Inst 6: csel x0, x1, x0, hi
; Inst 7: ret
; Block 2:
; (original IR block: block1)
; (instruction range: 8 .. 9)
; Inst 8: udf
; }}
; block0:
; mov w8, w1
; subs xzr, x8, #65536
; b.ls label1 ; b label2
; block1:
; add x10, x0, x1, UXTW
; subs xzr, x8, #65536
; movz x11, #0
; csel x0, x11, x10, hi
; ret
; block2:
; udf

View File

@@ -14,17 +14,12 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: movz x0, #56780
; Inst 1: uxth w0, w0
; Inst 2: movz x1, #56780
; Inst 3: subs wzr, w0, w1, UXTH
; Inst 4: cset x0, ne
; Inst 5: and w0, w0, #1
; Inst 6: ret
; }}
; block0:
; movz x3, #56780
; uxth w5, w3
; movz x7, #56780
; subs wzr, w5, w7, UXTH
; cset x4, ne
; and w0, w4, #1
; ret

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set unwind_info=false
target aarch64
@@ -29,16 +29,31 @@ block5(v5: i64):
return v6
}
; check: subs wzr, w0, #3
; nextln: b.hs label1 ; adr x1, pc+16 ; ldrsw x2, [x1, x0, LSL 2] ; add x1, x1, x2 ; br x1 ; jt_entries
; check: movz x1, #1
; nextln: b
; check: movz x1, #2
; nextln: b
; check: movz x1, #3
; check: add x0, x0, x1
; block0:
; emit_island 36
; subs wzr, w0, #3
; b.hs label1 ; adr x15, pc+16 ; ldrsw x1, [x15, x0, LSL 2] ; add x15, x15, x1 ; br x15 ; jt_entries [Label(MachLabel(3)), Label(MachLabel(5)), Label(MachLabel(7))]
; block1:
; movz x5, #4
; b label2
; block2:
; b label9
; block3:
; movz x5, #1
; b label4
; block4:
; b label9
; block5:
; movz x5, #2
; b label6
; block6:
; b label9
; block7:
; movz x5, #3
; b label8
; block8:
; b label9
; block9:
; add x0, x0, x5
; ret

View File

@@ -10,13 +10,8 @@ block1:
return v0, v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block1)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #1
; Inst 1: movz x1, #2
; Inst 2: ret
; }}
; block0:
; movz x0, #1
; movz x1, #2
; ret

View File

@@ -8,14 +8,9 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, w1
; Inst 1: ret
; }}
; block0:
; add w0, w0, w1
; ret
function %add16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -23,14 +18,9 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, w1
; Inst 1: ret
; }}
; block0:
; add w0, w0, w1
; ret
function %add32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -38,14 +28,9 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, w1
; Inst 1: ret
; }}
; block0:
; add w0, w0, w1
; ret
function %add32_8(i32, i8) -> i32 {
block0(v0: i32, v1: i8):
@@ -54,14 +39,9 @@ block0(v0: i32, v1: i8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add w0, w0, w1, SXTB
; Inst 1: ret
; }}
; block0:
; add w0, w0, w1, SXTB
; ret
function %add64_32(i64, i32) -> i64 {
block0(v0: i64, v1: i32):
@@ -70,12 +50,7 @@ block0(v0: i64, v1: i32):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add x0, x0, x1, SXTW
; Inst 1: ret
; }}
; block0:
; add x0, x0, x1, SXTW
; ret

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set unwind_info=false
target aarch64
@@ -75,19 +75,85 @@ block0(v0: f64):
return v62
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: stp d14, d15, [sp, #-16]!
; nextln: stp d12, d13, [sp, #-16]!
; nextln: stp d10, d11, [sp, #-16]!
; nextln: stp d8, d9, [sp, #-16]!
; check: ldp d8, d9, [sp], #16
; nextln: ldp d10, d11, [sp], #16
; nextln: ldp d12, d13, [sp], #16
; nextln: ldp d14, d15, [sp], #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; stp d14, d15, [sp, #-16]!
; stp d12, d13, [sp, #-16]!
; stp d10, d11, [sp, #-16]!
; stp d8, d9, [sp, #-16]!
; sub sp, sp, #16
; block0:
; fadd d4, d0, d0
; fadd d6, d0, d0
; str q6, [sp]
; fadd d6, d0, d0
; fadd d8, d0, d0
; fadd d10, d0, d0
; fadd d12, d0, d0
; fadd d14, d0, d0
; fadd d1, d0, d0
; fadd d3, d0, d0
; fadd d5, d0, d0
; fadd d7, d0, d0
; fadd d9, d0, d0
; fadd d11, d0, d0
; fadd d13, d0, d0
; fadd d16, d0, d0
; fadd d15, d0, d0
; fadd d20, d0, d0
; fadd d22, d0, d0
; fadd d24, d0, d0
; fadd d26, d0, d0
; fadd d28, d0, d0
; fadd d30, d0, d0
; fadd d17, d0, d0
; fadd d19, d0, d0
; fadd d21, d0, d0
; fadd d23, d0, d0
; fadd d25, d0, d0
; fadd d27, d0, d0
; fadd d29, d0, d0
; fadd d18, d0, d0
; fadd d2, d0, d0
; fadd d0, d0, d4
; ldr q4, [sp]
; fadd d6, d4, d6
; fadd d4, d8, d10
; fadd d10, d12, d14
; fadd d8, d1, d3
; fadd d14, d5, d7
; fadd d12, d9, d11
; fadd d3, d13, d16
; fadd d1, d15, d20
; fadd d7, d22, d24
; fadd d5, d26, d28
; fadd d11, d30, d17
; fadd d9, d19, d21
; fadd d15, d23, d25
; fadd d13, d27, d29
; fadd d2, d18, d2
; fadd d0, d0, d6
; fadd d6, d4, d10
; fadd d4, d8, d14
; fadd d10, d12, d3
; fadd d8, d1, d7
; fadd d11, d5, d11
; fadd d12, d9, d15
; fadd d14, d13, d2
; fadd d0, d0, d6
; fadd d2, d4, d10
; fadd d4, d8, d11
; fadd d6, d12, d14
; fadd d8, d0, d2
; fadd d10, d4, d6
; fadd d0, d8, d10
; add sp, sp, #16
; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16
; ldp d14, d15, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %f2(i64) -> i64 {
block0(v0: i64):
@@ -135,14 +201,49 @@ block0(v0: i64):
return v36
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: str x22, [sp, #-16]!
; nextln: stp x19, x20, [sp, #-16]!
; nextln: add x1, x0, x0
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x19, x21, [sp, #-16]!
; block0:
; add x6, x0, x0
; add x7, x0, x6
; add x8, x0, x7
; add x9, x0, x8
; add x10, x0, x9
; add x11, x0, x10
; add x12, x0, x11
; add x13, x0, x12
; add x14, x0, x13
; add x15, x0, x14
; add x1, x0, x15
; add x2, x0, x1
; add x3, x0, x2
; add x4, x0, x3
; add x5, x0, x4
; add x28, x0, x5
; add x21, x0, x28
; add x19, x0, x21
; add x6, x0, x6
; add x7, x7, x8
; add x8, x9, x10
; add x9, x11, x12
; add x10, x13, x14
; add x11, x15, x1
; add x12, x2, x3
; add x13, x4, x5
; add x14, x28, x21
; add x6, x19, x6
; add x7, x7, x8
; add x8, x9, x10
; add x9, x11, x12
; add x10, x13, x14
; add x6, x6, x7
; add x7, x8, x9
; add x6, x10, x6
; add x0, x7, x6
; ldp x19, x21, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
; check: add x0, x1, x0
; nextln: ldp x19, x20, [sp], #16
; nextln: ldr x22, [sp], #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret

View File

@@ -8,13 +8,8 @@ block0(v0: i128):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %ireduce_128_32(i128) -> i32 {
block0(v0: i128):
@@ -22,13 +17,8 @@ block0(v0: i128):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %ireduce_128_16(i128) -> i16 {
block0(v0: i128):
@@ -36,13 +26,8 @@ block0(v0: i128):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %ireduce_128_8(i128) -> i8 {
block0(v0: i128):
@@ -50,11 +35,6 @@ block0(v0: i128):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret

View File

@@ -7,13 +7,8 @@ block0(v0: r64):
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %f1(r64) -> b1 {
block0(v0: r64):
@@ -21,15 +16,10 @@ block0(v0: r64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs xzr, x0, #0
; Inst 1: cset x0, eq
; Inst 2: ret
; }}
; block0:
; subs xzr, x0, #0
; cset x0, eq
; ret
function %f2(r64) -> b1 {
block0(v0: r64):
@@ -37,15 +27,10 @@ block0(v0: r64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: adds xzr, x0, #1
; Inst 1: cset x0, eq
; Inst 2: ret
; }}
; block0:
; adds xzr, x0, #1
; cset x0, eq
; ret
function %f3() -> r64 {
block0:
@@ -53,14 +38,9 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movz x0, #0
; Inst 1: ret
; }}
; block0:
; movz x0, #0
; ret
function %f4(r64, r64) -> r64, r64, r64 {
fn0 = %f(r64) -> b1
@@ -83,63 +63,38 @@ block3(v7: r64, v8: r64):
return v7, v8, v9
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 3)
; (instruction range: 0 .. 18)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: stp x19, x20, [sp, #-16]!
; Inst 3: sub sp, sp, #32
; Inst 4: mov x19, x0
; Inst 5: mov x20, x1
; Inst 6: mov x0, x19
; Inst 7: ldr x1, 8 ; b 12 ; data TestCase { length: 1, ascii: [102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; Inst 8: stur x0, [sp, #8]
; Inst 9: stur x19, [sp, #16]
; Inst 10: stur x20, [sp, #24]
; (safepoint: slots [S0, S1, S2] with EmitState EmitState { virtual_sp_offset: 0, nominal_sp_to_fp: 0, stack_map: None, cur_srcloc: SourceLoc(4294967295) })
; Inst 11: blr x1
; Inst 12: ldur x19, [sp, #16]
; Inst 13: ldur x20, [sp, #24]
; Inst 14: mov x1, sp
; Inst 15: str x19, [x1]
; Inst 16: and w0, w0, #1
; Inst 17: cbz x0, label1 ; b label3
; Block 1:
; (original IR block: block1)
; (successor: Block 2)
; (instruction range: 18 .. 19)
; Inst 18: b label2
; Block 2:
; (successor: Block 5)
; (instruction range: 19 .. 21)
; Inst 19: mov x0, x20
; Inst 20: b label5
; Block 3:
; (original IR block: block2)
; (successor: Block 4)
; (instruction range: 21 .. 22)
; Inst 21: b label4
; Block 4:
; (successor: Block 5)
; (instruction range: 22 .. 25)
; Inst 22: mov x0, x19
; Inst 23: mov x19, x20
; Inst 24: b label5
; Block 5:
; (original IR block: block3)
; (instruction range: 25 .. 33)
; Inst 25: mov x1, sp
; Inst 26: ldr x1, [x1]
; Inst 27: mov x2, x1
; Inst 28: mov x1, x19
; Inst 29: add sp, sp, #32
; Inst 30: ldp x19, x20, [sp], #16
; Inst 31: ldp fp, lr, [sp], #16
; Inst 32: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #32
; block0:
; mov x4, x1
; mov x2, x0
; ldr x3, 8 ; b 12 ; data TestCase { length: 1, ascii: [102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; str x2, [sp, #8]
; str x4, [sp, #16]
; blr x3
; ldr x2, [sp, #8]
; mov x9, sp
; mov x12, x2
; str x12, [x9]
; and w7, w0, #1
; cbz x7, label1 ; b label3
; block1:
; b label2
; block2:
; mov x1, x12
; ldr x0, [sp, #16]
; b label5
; block3:
; b label4
; block4:
; mov x0, x12
; ldr x1, [sp, #16]
; b label5
; block5:
; mov x4, sp
; ldr x2, [x4]
; add sp, sp, #32
; ldp fp, lr, [sp], #16
; ret

View File

@@ -10,14 +10,9 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: add x0, x0, x0, LSL 3
; Inst 1: ret
; }}
; block0:
; add x0, x0, x0, LSL 3
; ret
function %f(i32) -> i32 {
block0(v0: i32):
@@ -26,12 +21,7 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsl w0, w0, #21
; Inst 1: ret
; }}
; block0:
; lsl w0, w0, #21
; ret

View File

@@ -12,37 +12,30 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 25)
; Inst 0: mov x4, x1
; Inst 1: orr x1, xzr, #128
; Inst 2: sub x1, x1, x2
; Inst 3: lsr x5, x0, x2
; Inst 4: lsr x3, x4, x2
; Inst 5: orn w6, wzr, w2
; Inst 6: lsl x7, x4, #1
; Inst 7: lsl x6, x7, x6
; Inst 8: orr x5, x5, x6
; Inst 9: ands xzr, x2, #64
; Inst 10: csel x2, x3, x5, ne
; Inst 11: csel x3, xzr, x3, ne
; Inst 12: lsl x5, x0, x1
; Inst 13: lsl x4, x4, x1
; Inst 14: orn w6, wzr, w1
; Inst 15: lsr x0, x0, #1
; Inst 16: lsr x0, x0, x6
; Inst 17: orr x0, x4, x0
; Inst 18: ands xzr, x1, #64
; Inst 19: csel x1, xzr, x5, ne
; Inst 20: csel x0, x5, x0, ne
; Inst 21: orr x3, x3, x0
; Inst 22: orr x0, x2, x1
; Inst 23: mov x1, x3
; Inst 24: ret
; }}
; block0:
; orr x10, xzr, #128
; sub x12, x10, x2
; lsr x14, x0, x2
; lsr x3, x1, x2
; orn w4, wzr, w2
; lsl x5, x1, #1
; lsl x6, x5, x4
; orr x8, x14, x6
; ands xzr, x2, #64
; csel x11, x3, x8, ne
; csel x13, xzr, x3, ne
; lsl x15, x0, x12
; lsl x1, x1, x12
; orn w3, wzr, w12
; lsr x5, x0, #1
; lsr x7, x5, x3
; orr x9, x1, x7
; ands xzr, x12, #64
; csel x12, xzr, x15, ne
; csel x14, x15, x9, ne
; orr x1, x13, x14
; orr x0, x11, x12
; ret
function %f0(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -50,14 +43,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ror x0, x0, x1
; Inst 1: ret
; }}
; block0:
; ror x0, x0, x1
; ret
function %f1(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -65,14 +53,9 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ror w0, w0, w1
; Inst 1: ret
; }}
; block0:
; ror w0, w0, w1
; ret
function %f2(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -80,20 +63,15 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: uxth w0, w0
; Inst 1: and w1, w1, #15
; Inst 2: sub w2, w1, #16
; Inst 3: sub w2, wzr, w2
; Inst 4: lsr w1, w0, w1
; Inst 5: lsl w0, w0, w2
; Inst 6: orr w0, w0, w1
; Inst 7: ret
; }}
; block0:
; uxth w5, w0
; and w7, w1, #15
; sub w9, w7, #16
; sub w11, wzr, w9
; lsr w13, w5, w7
; lsl w15, w5, w11
; orr w0, w15, w13
; ret
function %f3(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -101,20 +79,15 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: uxtb w0, w0
; Inst 1: and w1, w1, #7
; Inst 2: sub w2, w1, #8
; Inst 3: sub w2, wzr, w2
; Inst 4: lsr w1, w0, w1
; Inst 5: lsl w0, w0, w2
; Inst 6: orr w0, w0, w1
; Inst 7: ret
; }}
; block0:
; uxtb w5, w0
; and w7, w1, #7
; sub w9, w7, #8
; sub w11, wzr, w9
; lsr w13, w5, w7
; lsl w15, w5, w11
; orr w0, w15, w13
; ret
function %i128_rotl(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
@@ -122,36 +95,30 @@ block0(v0: i128, v1: i128):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 24)
; Inst 0: mov x4, x0
; Inst 1: orr x0, xzr, #128
; Inst 2: sub x0, x0, x2
; Inst 3: lsl x3, x4, x2
; Inst 4: lsl x5, x1, x2
; Inst 5: orn w6, wzr, w2
; Inst 6: lsr x7, x4, #1
; Inst 7: lsr x6, x7, x6
; Inst 8: orr x5, x5, x6
; Inst 9: ands xzr, x2, #64
; Inst 10: csel x2, xzr, x3, ne
; Inst 11: csel x3, x3, x5, ne
; Inst 12: lsr x5, x4, x0
; Inst 13: lsr x4, x1, x0
; Inst 14: orn w6, wzr, w0
; Inst 15: lsl x1, x1, #1
; Inst 16: lsl x1, x1, x6
; Inst 17: orr x1, x5, x1
; Inst 18: ands xzr, x0, #64
; Inst 19: csel x0, x4, x1, ne
; Inst 20: csel x1, xzr, x4, ne
; Inst 21: orr x0, x2, x0
; Inst 22: orr x1, x3, x1
; Inst 23: ret
; }}
; block0:
; orr x10, xzr, #128
; sub x12, x10, x2
; lsl x14, x0, x2
; lsl x3, x1, x2
; orn w4, wzr, w2
; lsr x5, x0, #1
; lsr x6, x5, x4
; orr x8, x3, x6
; ands xzr, x2, #64
; csel x11, xzr, x14, ne
; csel x13, x14, x8, ne
; lsr x15, x0, x12
; lsr x2, x1, x12
; orn w3, wzr, w12
; lsl x5, x1, #1
; lsl x7, x5, x3
; orr x9, x15, x7
; ands xzr, x12, #64
; csel x12, x2, x9, ne
; csel x14, xzr, x2, ne
; orr x0, x11, x12
; orr x1, x13, x14
; ret
function %f4(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -159,15 +126,10 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sub x1, xzr, x1
; Inst 1: ror x0, x0, x1
; Inst 2: ret
; }}
; block0:
; sub x5, xzr, x1
; ror x0, x0, x5
; ret
function %f5(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -175,15 +137,10 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: sub w1, wzr, w1
; Inst 1: ror w0, w0, w1
; Inst 2: ret
; }}
; block0:
; sub w5, wzr, w1
; ror w0, w0, w5
; ret
function %f6(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -191,21 +148,16 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: sub w1, wzr, w1
; Inst 1: uxth w0, w0
; Inst 2: and w1, w1, #15
; Inst 3: sub w2, w1, #16
; Inst 4: sub w2, wzr, w2
; Inst 5: lsr w1, w0, w1
; Inst 6: lsl w0, w0, w2
; Inst 7: orr w0, w0, w1
; Inst 8: ret
; }}
; block0:
; sub w5, wzr, w1
; uxth w7, w0
; and w9, w5, #15
; sub w11, w9, #16
; sub w13, wzr, w11
; lsr w15, w7, w9
; lsl w1, w7, w13
; orr w0, w1, w15
; ret
function %f7(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -213,21 +165,16 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: sub w1, wzr, w1
; Inst 1: uxtb w0, w0
; Inst 2: and w1, w1, #7
; Inst 3: sub w2, w1, #8
; Inst 4: sub w2, wzr, w2
; Inst 5: lsr w1, w0, w1
; Inst 6: lsl w0, w0, w2
; Inst 7: orr w0, w0, w1
; Inst 8: ret
; }}
; block0:
; sub w5, wzr, w1
; uxtb w7, w0
; and w9, w5, #7
; sub w11, w9, #8
; sub w13, wzr, w11
; lsr w15, w7, w9
; lsl w1, w7, w13
; orr w0, w1, w15
; ret
function %f8(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -235,14 +182,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsr x0, x0, x1
; Inst 1: ret
; }}
; block0:
; lsr x0, x0, x1
; ret
function %f9(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -250,14 +192,9 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsr w0, w0, w1
; Inst 1: ret
; }}
; block0:
; lsr w0, w0, w1
; ret
function %f10(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -265,16 +202,11 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxth w0, w0
; Inst 1: and w1, w1, #15
; Inst 2: lsr w0, w0, w1
; Inst 3: ret
; }}
; block0:
; uxth w5, w0
; and w7, w1, #15
; lsr w0, w5, w7
; ret
function %f11(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -282,16 +214,11 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxtb w0, w0
; Inst 1: and w1, w1, #7
; Inst 2: lsr w0, w0, w1
; Inst 3: ret
; }}
; block0:
; uxtb w5, w0
; and w7, w1, #7
; lsr w0, w5, w7
; ret
function %f12(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -299,14 +226,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsl x0, x0, x1
; Inst 1: ret
; }}
; block0:
; lsl x0, x0, x1
; ret
function %f13(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -314,14 +236,9 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsl w0, w0, w1
; Inst 1: ret
; }}
; block0:
; lsl w0, w0, w1
; ret
function %f14(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -329,15 +246,10 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: and w1, w1, #15
; Inst 1: lsl w0, w0, w1
; Inst 2: ret
; }}
; block0:
; and w5, w1, #15
; lsl w0, w0, w5
; ret
function %f15(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -345,15 +257,10 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: and w1, w1, #7
; Inst 1: lsl w0, w0, w1
; Inst 2: ret
; }}
; block0:
; and w5, w1, #7
; lsl w0, w0, w5
; ret
function %f16(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -361,14 +268,9 @@ block0(v0: i64, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: asr x0, x0, x1
; Inst 1: ret
; }}
; block0:
; asr x0, x0, x1
; ret
function %f17(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -376,14 +278,9 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: asr w0, w0, w1
; Inst 1: ret
; }}
; block0:
; asr w0, w0, w1
; ret
function %f18(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -391,16 +288,11 @@ block0(v0: i16, v1: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: sxth w0, w0
; Inst 1: and w1, w1, #15
; Inst 2: asr w0, w0, w1
; Inst 3: ret
; }}
; block0:
; sxth w5, w0
; and w7, w1, #15
; asr w0, w5, w7
; ret
function %f19(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -408,16 +300,11 @@ block0(v0: i8, v1: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: sxtb w0, w0
; Inst 1: and w1, w1, #7
; Inst 2: asr w0, w0, w1
; Inst 3: ret
; }}
; block0:
; sxtb w5, w0
; and w7, w1, #7
; asr w0, w5, w7
; ret
function %f20(i64) -> i64 {
block0(v0: i64):
@@ -426,14 +313,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ror x0, x0, #17
; Inst 1: ret
; }}
; block0:
; ror x0, x0, #17
; ret
function %f21(i64) -> i64 {
block0(v0: i64):
@@ -442,14 +324,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ror x0, x0, #47
; Inst 1: ret
; }}
; block0:
; ror x0, x0, #47
; ret
function %f22(i32) -> i32 {
block0(v0: i32):
@@ -458,14 +335,9 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ror w0, w0, #15
; Inst 1: ret
; }}
; block0:
; ror w0, w0, #15
; ret
function %f23(i16) -> i16 {
block0(v0: i16):
@@ -474,17 +346,12 @@ block0(v0: i16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: uxth w0, w0
; Inst 1: lsr w1, w0, #6
; Inst 2: lsl w0, w0, #10
; Inst 3: orr w0, w0, w1
; Inst 4: ret
; }}
; block0:
; uxth w3, w0
; lsr w5, w3, #6
; lsl w7, w3, #10
; orr w0, w7, w5
; ret
function %f24(i8) -> i8 {
block0(v0: i8):
@@ -493,17 +360,12 @@ block0(v0: i8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: uxtb w0, w0
; Inst 1: lsr w1, w0, #5
; Inst 2: lsl w0, w0, #3
; Inst 3: orr w0, w0, w1
; Inst 4: ret
; }}
; block0:
; uxtb w3, w0
; lsr w5, w3, #5
; lsl w7, w3, #3
; orr w0, w7, w5
; ret
function %f25(i64) -> i64 {
block0(v0: i64):
@@ -512,14 +374,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsr x0, x0, #17
; Inst 1: ret
; }}
; block0:
; lsr x0, x0, #17
; ret
function %f26(i64) -> i64 {
block0(v0: i64):
@@ -528,14 +385,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: asr x0, x0, #17
; Inst 1: ret
; }}
; block0:
; asr x0, x0, #17
; ret
function %f27(i64) -> i64 {
block0(v0: i64):
@@ -544,12 +396,7 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: lsl x0, x0, #17
; Inst 1: ret
; }}
; block0:
; lsl x0, x0, #17
; ret

View File

@@ -10,14 +10,9 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull v0.8h, v0.8b, v1.8b
; Inst 1: ret
; }}
; block0:
; smull v0.8h, v0.8b, v1.8b
; ret
function %fn2(i8x16, i8x16) -> i16x8 {
block0(v0: i8x16, v1: i8x16):
@@ -27,14 +22,9 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull2 v0.8h, v0.16b, v1.16b
; Inst 1: ret
; }}
; block0:
; smull2 v0.8h, v0.16b, v1.16b
; ret
function %fn3(i16x8, i16x8) -> i32x4 {
block0(v0: i16x8, v1: i16x8):
@@ -44,14 +34,9 @@ block0(v0: i16x8, v1: i16x8):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull v0.4s, v0.4h, v1.4h
; Inst 1: ret
; }}
; block0:
; smull v0.4s, v0.4h, v1.4h
; ret
function %fn4(i16x8, i16x8) -> i32x4 {
block0(v0: i16x8, v1: i16x8):
@@ -61,14 +46,9 @@ block0(v0: i16x8, v1: i16x8):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull2 v0.4s, v0.8h, v1.8h
; Inst 1: ret
; }}
; block0:
; smull2 v0.4s, v0.8h, v1.8h
; ret
function %fn5(i32x4, i32x4) -> i64x2 {
block0(v0: i32x4, v1: i32x4):
@@ -78,14 +58,9 @@ block0(v0: i32x4, v1: i32x4):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull v0.2d, v0.2s, v1.2s
; Inst 1: ret
; }}
; block0:
; smull v0.2d, v0.2s, v1.2s
; ret
function %fn6(i32x4, i32x4) -> i64x2 {
block0(v0: i32x4, v1: i32x4):
@@ -95,14 +70,9 @@ block0(v0: i32x4, v1: i32x4):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: smull2 v0.2d, v0.4s, v1.4s
; Inst 1: ret
; }}
; block0:
; smull2 v0.2d, v0.4s, v1.4s
; ret
function %fn7(i8x16, i8x16) -> i16x8 {
block0(v0: i8x16, v1: i8x16):
@@ -112,14 +82,9 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull v0.8h, v0.8b, v1.8b
; Inst 1: ret
; }}
; block0:
; umull v0.8h, v0.8b, v1.8b
; ret
function %fn8(i8x16, i8x16) -> i16x8 {
block0(v0: i8x16, v1: i8x16):
@@ -129,14 +94,9 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull2 v0.8h, v0.16b, v1.16b
; Inst 1: ret
; }}
; block0:
; umull2 v0.8h, v0.16b, v1.16b
; ret
function %fn9(i16x8, i16x8) -> i32x4 {
block0(v0: i16x8, v1: i16x8):
@@ -146,14 +106,9 @@ block0(v0: i16x8, v1: i16x8):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull v0.4s, v0.4h, v1.4h
; Inst 1: ret
; }}
; block0:
; umull v0.4s, v0.4h, v1.4h
; ret
function %fn10(i16x8, i16x8) -> i32x4 {
block0(v0: i16x8, v1: i16x8):
@@ -163,14 +118,9 @@ block0(v0: i16x8, v1: i16x8):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull2 v0.4s, v0.8h, v1.8h
; Inst 1: ret
; }}
; block0:
; umull2 v0.4s, v0.8h, v1.8h
; ret
function %fn11(i32x4, i32x4) -> i64x2 {
block0(v0: i32x4, v1: i32x4):
@@ -180,14 +130,9 @@ block0(v0: i32x4, v1: i32x4):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull v0.2d, v0.2s, v1.2s
; Inst 1: ret
; }}
; block0:
; umull v0.2d, v0.2s, v1.2s
; ret
function %fn12(i32x4, i32x4) -> i64x2 {
block0(v0: i32x4, v1: i32x4):
@@ -197,12 +142,7 @@ block0(v0: i32x4, v1: i32x4):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: umull2 v0.2d, v0.4s, v1.4s
; Inst 1: ret
; }}
; block0:
; umull2 v0.2d, v0.4s, v1.4s
; ret

View File

@@ -11,14 +11,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: saddlp v0.8h, v0.16b
; Inst 1: ret
; }}
; block0:
; saddlp v0.8h, v0.16b
; ret
function %fn2(i8x16) -> i16x8 {
block0(v0: i8x16):
@@ -28,14 +23,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uaddlp v0.8h, v0.16b
; Inst 1: ret
; }}
; block0:
; uaddlp v0.8h, v0.16b
; ret
function %fn3(i16x8) -> i32x4 {
block0(v0: i16x8):
@@ -45,14 +35,9 @@ block0(v0: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: saddlp v0.4s, v0.8h
; Inst 1: ret
; }}
; block0:
; saddlp v0.4s, v0.8h
; ret
function %fn4(i16x8) -> i32x4 {
block0(v0: i16x8):
@@ -62,14 +47,9 @@ block0(v0: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uaddlp v0.4s, v0.8h
; Inst 1: ret
; }}
; block0:
; uaddlp v0.4s, v0.8h
; ret
function %fn5(i8x16, i8x16) -> i16x8 {
block0(v0: i8x16, v1: i8x16):
@@ -79,16 +59,11 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: sxtl v0.8h, v0.8b
; Inst 1: sxtl2 v1.8h, v1.16b
; Inst 2: addp v0.8h, v0.8h, v1.8h
; Inst 3: ret
; }}
; block0:
; sxtl v4.8h, v0.8b
; sxtl2 v6.8h, v1.16b
; addp v0.8h, v4.8h, v6.8h
; ret
function %fn6(i8x16, i8x16) -> i16x8 {
block0(v0: i8x16, v1: i8x16):
@@ -98,16 +73,11 @@ block0(v0: i8x16, v1: i8x16):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxtl v0.8h, v0.8b
; Inst 1: uxtl2 v1.8h, v1.16b
; Inst 2: addp v0.8h, v0.8h, v1.8h
; Inst 3: ret
; }}
; block0:
; uxtl v4.8h, v0.8b
; uxtl2 v6.8h, v1.16b
; addp v0.8h, v4.8h, v6.8h
; ret
function %fn7(i8x16) -> i16x8 {
block0(v0: i8x16):
@@ -117,16 +87,11 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: uxtl v1.8h, v0.8b
; Inst 1: sxtl2 v0.8h, v0.16b
; Inst 2: addp v0.8h, v1.8h, v0.8h
; Inst 3: ret
; }}
; block0:
; uxtl v2.8h, v0.8b
; sxtl2 v4.8h, v0.16b
; addp v0.8h, v2.8h, v4.8h
; ret
function %fn8(i8x16) -> i16x8 {
block0(v0: i8x16):
@@ -136,14 +101,9 @@ block0(v0: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: sxtl v1.8h, v0.8b
; Inst 1: uxtl2 v0.8h, v0.16b
; Inst 2: addp v0.8h, v1.8h, v0.8h
; Inst 3: ret
; }}
; block0:
; sxtl v2.8h, v0.8b
; uxtl2 v4.8h, v0.16b
; addp v0.8h, v2.8h, v4.8h
; ret

View File

@@ -9,16 +9,11 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: movz x0, #1
; Inst 1: movk x0, #1, LSL #48
; Inst 2: dup v0.2d, x0
; Inst 3: ret
; }}
; block0:
; movz x2, #1
; movk x2, #1, LSL #48
; dup v0.2d, x2
; ret
function %f2() -> i16x8 {
block0:
@@ -28,15 +23,10 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #42679
; Inst 1: dup v0.8h, w0
; Inst 2: ret
; }}
; block0:
; movz x2, #42679
; dup v0.8h, w2
; ret
function %f3() -> b8x16 {
block0:
@@ -46,14 +36,9 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: movi v0.16b, #255
; Inst 1: ret
; }}
; block0:
; movi v0.16b, #255
; ret
function %f4(i32, i8x16, i8x16) -> i8x16 {
block0(v0: i32, v1: i8x16, v2: i8x16):
@@ -61,15 +46,10 @@ block0(v0: i32, v1: i8x16, v2: i8x16):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs wzr, w0, wzr
; Inst 1: vcsel v0.16b, v0.16b, v1.16b, ne (if-then-else diamond)
; Inst 2: ret
; }}
; block0:
; subs wzr, w0, wzr
; vcsel v0.16b, v0.16b, v1.16b, ne (if-then-else diamond)
; ret
function %f5(i64) -> i8x16 {
block0(v0: i64):
@@ -78,14 +58,9 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ld1r { v0.16b }, [x0]
; Inst 1: ret
; }}
; block0:
; ld1r { v0.16b }, [x0]
; ret
function %f6(i64, i64) -> i8x16, i8x16 {
block0(v0: i64, v1: i64):
@@ -96,15 +71,10 @@ block0(v0: i64, v1: i64):
return v4, v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: ld1r { v0.16b }, [x0]
; Inst 1: ld1r { v1.16b }, [x1]
; Inst 2: ret
; }}
; block0:
; ld1r { v0.16b }, [x0]
; ld1r { v1.16b }, [x1]
; ret
function %f7(i64, i64) -> i8x16, i8x16 {
block0(v0: i64, v1: i64):
@@ -115,16 +85,11 @@ block0(v0: i64, v1: i64):
return v4, v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: ldrb w0, [x0]
; Inst 1: ld1r { v0.16b }, [x1]
; Inst 2: dup v1.16b, w0
; Inst 3: ret
; }}
; block0:
; ldrb w4, [x0]
; ld1r { v0.16b }, [x1]
; dup v1.16b, w4
; ret
function %f8(i64, i64) -> i8x16, i8x16 {
block0(v0: i64, v1: i64):
@@ -134,16 +99,11 @@ block0(v0: i64, v1: i64):
return v3, v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: ldrb w0, [x0]
; Inst 1: dup v0.16b, w0
; Inst 2: dup v1.16b, w0
; Inst 3: ret
; }}
; block0:
; ldrb w4, [x0]
; dup v0.16b, w4
; dup v1.16b, w4
; ret
function %f9() -> i32x2 {
block0:
@@ -152,15 +112,10 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movi v0.2d, #18374687579166474495
; Inst 1: fmov d0, d0
; Inst 2: ret
; }}
; block0:
; movi v0.2d, #18374687579166474495
; fmov d0, d0
; ret
function %f10() -> i32x4 {
block0:
@@ -169,14 +124,9 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: mvni v0.4s, #15, MSL #16
; Inst 1: ret
; }}
; block0:
; mvni v0.4s, #15, MSL #16
; ret
function %f11() -> f32x4 {
block0:
@@ -185,12 +135,7 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: fmov v0.4s, #1.3125
; Inst 1: ret
; }}
; block0:
; fmov v0.4s, #1.3125
; ret

View File

@@ -9,16 +9,11 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 4)
; Inst 0: movz x0, #1
; Inst 1: movk x0, #1, LSL #48
; Inst 2: fmov d0, x0
; Inst 3: ret
; }}
; block0:
; movz x2, #1
; movk x2, #1, LSL #48
; fmov d0, x2
; ret
function %f2() -> i32x4 {
block0:
@@ -27,13 +22,8 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: movz x0, #42679
; Inst 1: fmov s0, w0
; Inst 2: ret
; }}
; block0:
; movz x2, #42679
; fmov s0, w2
; ret

View File

@@ -7,26 +7,16 @@ block0:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %stack_limit_leaf_zero(i64 stack_limit) {
block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %stack_limit_gv_leaf_zero(i64 vmctx) {
gv0 = vmctx
@@ -37,13 +27,8 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: ret
; }}
; block0:
; ret
function %stack_limit_call_zero(i64 stack_limit) {
fn0 = %foo()
@@ -52,20 +37,15 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: subs xzr, sp, x0, UXTX
; Inst 3: b.hs 8 ; udf
; Inst 4: ldr x0, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; Inst 5: blr x0
; Inst 6: ldp fp, lr, [sp], #16
; Inst 7: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; subs xzr, sp, x0, UXTX
; b.hs 8 ; udf
; block0:
; ldr x2, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x2
; ldp fp, lr, [sp], #16
; ret
function %stack_limit_gv_call_zero(i64 vmctx) {
gv0 = vmctx
@@ -78,22 +58,17 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 10)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: ldur x16, [x0]
; Inst 3: ldur x16, [x16, #4]
; Inst 4: subs xzr, sp, x16, UXTX
; Inst 5: b.hs 8 ; udf
; Inst 6: ldr x0, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; Inst 7: blr x0
; Inst 8: ldp fp, lr, [sp], #16
; Inst 9: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; ldr x16, [x0]
; ldr x16, [x16, #4]
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; block0:
; ldr x2, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
; blr x2
; ldp fp, lr, [sp], #16
; ret
function %stack_limit(i64 stack_limit) {
ss0 = explicit_slot 168
@@ -101,21 +76,16 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: add x16, x0, #176
; Inst 3: subs xzr, sp, x16, UXTX
; Inst 4: b.hs 8 ; udf
; Inst 5: sub sp, sp, #176
; Inst 6: add sp, sp, #176
; Inst 7: ldp fp, lr, [sp], #16
; Inst 8: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; add x16, x0, #176
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; sub sp, sp, #176
; block0:
; add sp, sp, #176
; ldp fp, lr, [sp], #16
; ret
function %huge_stack_limit(i64 stack_limit) {
ss0 = explicit_slot 400000
@@ -123,29 +93,24 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 17)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: subs xzr, sp, x0, UXTX
; Inst 3: b.hs 8 ; udf
; Inst 4: movz w17, #6784
; Inst 5: movk w17, #6, LSL #16
; Inst 6: add x16, x0, x17, UXTX
; Inst 7: subs xzr, sp, x16, UXTX
; Inst 8: b.hs 8 ; udf
; Inst 9: movz w16, #6784
; Inst 10: movk w16, #6, LSL #16
; Inst 11: sub sp, sp, x16, UXTX
; Inst 12: movz w16, #6784
; Inst 13: movk w16, #6, LSL #16
; Inst 14: add sp, sp, x16, UXTX
; Inst 15: ldp fp, lr, [sp], #16
; Inst 16: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; subs xzr, sp, x0, UXTX
; b.hs 8 ; udf
; movz w17, #6784
; movk w17, #6, LSL #16
; add x16, x0, x17, UXTX
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; movz w16, #6784
; movk w16, #6, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; movz w16, #6784
; movk w16, #6, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
function %limit_preamble(i64 vmctx) {
gv0 = vmctx
@@ -157,23 +122,18 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: ldur x16, [x0]
; Inst 3: ldur x16, [x16, #4]
; Inst 4: add x16, x16, #32
; Inst 5: subs xzr, sp, x16, UXTX
; Inst 6: b.hs 8 ; udf
; Inst 7: sub sp, sp, #32
; Inst 8: add sp, sp, #32
; Inst 9: ldp fp, lr, [sp], #16
; Inst 10: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; ldr x16, [x0]
; ldr x16, [x16, #4]
; add x16, x16, #32
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; sub sp, sp, #32
; block0:
; add sp, sp, #32
; ldp fp, lr, [sp], #16
; ret
function %limit_preamble_huge(i64 vmctx) {
gv0 = vmctx
@@ -185,31 +145,26 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 19)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: ldur x16, [x0]
; Inst 3: ldur x16, [x16, #4]
; Inst 4: subs xzr, sp, x16, UXTX
; Inst 5: b.hs 8 ; udf
; Inst 6: movz w17, #6784
; Inst 7: movk w17, #6, LSL #16
; Inst 8: add x16, x16, x17, UXTX
; Inst 9: subs xzr, sp, x16, UXTX
; Inst 10: b.hs 8 ; udf
; Inst 11: movz w16, #6784
; Inst 12: movk w16, #6, LSL #16
; Inst 13: sub sp, sp, x16, UXTX
; Inst 14: movz w16, #6784
; Inst 15: movk w16, #6, LSL #16
; Inst 16: add sp, sp, x16, UXTX
; Inst 17: ldp fp, lr, [sp], #16
; Inst 18: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; ldr x16, [x0]
; ldr x16, [x16, #4]
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; movz w17, #6784
; movk w17, #6, LSL #16
; add x16, x16, x17, UXTX
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; movz w16, #6784
; movk w16, #6, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; movz w16, #6784
; movk w16, #6, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
function %limit_preamble_huge_offset(i64 vmctx) {
gv0 = vmctx
@@ -220,20 +175,15 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 10)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: movz w16, #6784 ; movk w16, #6, LSL #16 ; add x16, x0, x16, UXTX ; ldr x16, [x16]
; Inst 3: add x16, x16, #32
; Inst 4: subs xzr, sp, x16, UXTX
; Inst 5: b.hs 8 ; udf
; Inst 6: sub sp, sp, #32
; Inst 7: add sp, sp, #32
; Inst 8: ldp fp, lr, [sp], #16
; Inst 9: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #6784 ; movk w16, #6, LSL #16 ; add x16, x0, x16, UXTX ; ldr x16, [x16]
; add x16, x16, #32
; subs xzr, sp, x16, UXTX
; b.hs 8 ; udf
; sub sp, sp, #32
; block0:
; add sp, sp, #32
; ldp fp, lr, [sp], #16
; ret

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set unwind_info=false
target aarch64
@@ -10,14 +10,14 @@ block0:
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #16
; nextln: mov x0, sp
; nextln: add sp, sp, #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #16
; block0:
; mov x0, sp
; add sp, sp, #16
; ldp fp, lr, [sp], #16
; ret
function %stack_addr_big() -> i64 {
ss0 = explicit_slot 100000
@@ -28,20 +28,18 @@ block0:
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: sub sp, sp, x16, UXTX
; nextln: mov x0, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: add sp, sp, x16, UXTX
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; FIXME: don't use stack_addr legalization for stack_load and stack_store
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; mov x0, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
function %stack_load_small() -> i64 {
ss0 = explicit_slot 8
@@ -51,15 +49,15 @@ block0:
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #16
; nextln: mov x0, sp
; nextln: ldr x0, [x0]
; nextln: add sp, sp, #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #16
; block0:
; mov x0, sp
; ldr x0, [x0]
; add sp, sp, #16
; ldp fp, lr, [sp], #16
; ret
function %stack_load_big() -> i64 {
ss0 = explicit_slot 100000
@@ -70,19 +68,19 @@ block0:
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: sub sp, sp, x16, UXTX
; nextln: mov x0, sp
; nextln: ldr x0, [x0]
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: add sp, sp, x16, UXTX
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; mov x0, sp
; ldr x0, [x0]
; movz w16, #34480
; movk w16, #1, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
function %stack_store_small(i64) {
ss0 = explicit_slot 8
@@ -92,15 +90,15 @@ block0(v0: i64):
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #16
; nextln: mov x1, sp
; nextln: str x0, [x1]
; nextln: add sp, sp, #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #16
; block0:
; mov x2, sp
; str x0, [x2]
; add sp, sp, #16
; ldp fp, lr, [sp], #16
; ret
function %stack_store_big(i64) {
ss0 = explicit_slot 100000
@@ -111,21 +109,20 @@ block0(v0: i64):
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: sub sp, sp, x16, UXTX
; nextln: mov x1, sp
; nextln: str x0, [x1]
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: add sp, sp, x16, UXTX
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; mov x2, sp
; str x0, [x2]
; movz w16, #34480
; movk w16, #1, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
; Force a b1 to be spilled into a slot at an SP offset between 0x100 and
; 0x1fff, to exercise the scaled addressing mode.
function %b1_spill_slot(b1) -> b1, i64 {
ss0 = explicit_slot 1000
@@ -277,7 +274,161 @@ block0(v0: b1):
return v0, v137
}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; stp x27, x28, [sp, #-16]!
; stp x25, x26, [sp, #-16]!
; stp x23, x24, [sp, #-16]!
; stp x21, x22, [sp, #-16]!
; stp x19, x20, [sp, #-16]!
; sub sp, sp, #1152
; block0:
; str x0, [sp, #1000]
; movz x8, #2
; add x11, x8, #1
; str x11, [sp, #1136]
; movz x8, #4
; add x12, x8, #3
; str x12, [sp, #1128]
; movz x8, #6
; add x13, x8, #5
; str x13, [sp, #1120]
; movz x8, #8
; add x14, x8, #7
; str x14, [sp, #1112]
; movz x8, #10
; add x15, x8, #9
; str x15, [sp, #1104]
; movz x8, #12
; add x1, x8, #11
; str x1, [sp, #1096]
; movz x8, #14
; add x2, x8, #13
; str x2, [sp, #1088]
; movz x8, #16
; add x3, x8, #15
; str x3, [sp, #1080]
; movz x8, #18
; add x4, x8, #17
; str x4, [sp, #1072]
; movz x8, #20
; add x5, x8, #19
; str x5, [sp, #1064]
; movz x8, #22
; add x6, x8, #21
; str x6, [sp, #1056]
; movz x8, #24
; add x7, x8, #23
; str x7, [sp, #1048]
; movz x8, #26
; add x8, x8, #25
; str x8, [sp, #1040]
; movz x8, #28
; add x9, x8, #27
; str x9, [sp, #1032]
; movz x8, #30
; add x26, x8, #29
; str x26, [sp, #1024]
; movz x8, #32
; add x27, x8, #31
; str x27, [sp, #1016]
; movz x8, #34
; add x28, x8, #33
; movz x8, #36
; add x21, x8, #35
; str x21, [sp, #1008]
; movz x8, #38
; add x21, x8, #37
; movz x8, #30
; add x19, x8, #39
; movz x8, #32
; add x20, x8, #31
; movz x8, #34
; add x22, x8, #33
; movz x8, #36
; add x23, x8, #35
; movz x8, #38
; add x24, x8, #37
; movz x8, #30
; add x25, x8, #39
; movz x8, #32
; add x0, x8, #31
; movz x8, #34
; add x10, x8, #33
; movz x8, #36
; add x11, x8, #35
; movz x8, #38
; add x12, x8, #37
; movz x8, #30
; add x13, x8, #39
; movz x8, #32
; add x14, x8, #31
; movz x8, #34
; add x15, x8, #33
; movz x8, #36
; add x1, x8, #35
; movz x8, #38
; add x2, x8, #37
; ldr x3, [sp, #1136]
; add x3, x3, #39
; ldr x5, [sp, #1120]
; ldr x4, [sp, #1128]
; add x4, x4, x5
; ldr x5, [sp, #1104]
; ldr x8, [sp, #1112]
; add x5, x8, x5
; ldr x6, [sp, #1088]
; ldr x7, [sp, #1096]
; add x6, x7, x6
; ldr x7, [sp, #1072]
; ldr x8, [sp, #1080]
; add x7, x8, x7
; ldr x9, [sp, #1056]
; ldr x8, [sp, #1064]
; add x8, x8, x9
; ldr x9, [sp, #1040]
; ldr x26, [sp, #1048]
; add x9, x26, x9
; ldr x26, [sp, #1024]
; ldr x27, [sp, #1032]
; add x26, x27, x26
; ldr x27, [sp, #1016]
; add x27, x27, x28
; ldr x28, [sp, #1008]
; add x28, x28, x21
; add x21, x19, x20
; add x19, x22, x23
; add x25, x24, x25
; add x10, x0, x10
; add x11, x11, x12
; add x12, x13, x14
; add x13, x15, x1
; add x14, x2, x3
; add x15, x4, x5
; add x0, x6, x7
; add x9, x8, x9
; add x1, x26, x27
; add x2, x28, x21
; add x3, x19, x25
; add x10, x10, x11
; add x11, x12, x13
; add x12, x14, x15
; add x9, x0, x9
; add x13, x1, x2
; add x10, x3, x10
; add x11, x11, x12
; add x9, x9, x13
; add x10, x10, x11
; add x1, x9, x10
; ldr x0, [sp, #1000]
; add sp, sp, #1152
; ldp x19, x20, [sp], #16
; ldp x21, x22, [sp], #16
; ldp x23, x24, [sp], #16
; ldp x25, x26, [sp], #16
; ldp x27, x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_store(i128) {
ss0 = explicit_slot 16
@@ -286,15 +437,16 @@ block0(v0: i128):
stack_store.i128 v0, ss0
return
}
; TODO: Codegen improvement opportunities: This should be just a stp x0, x1, [sp, #-16]
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #16
; nextln: mov x2, sp
; nextln: stp x0, x1, [x2]
; nextln: add sp, sp, #16
; nextln: ldp fp, lr, [sp], #16
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #16
; block0:
; mov x4, sp
; stp x0, x1, [x4]
; add sp, sp, #16
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_store_inst_offset(i128) {
ss0 = explicit_slot 16
@@ -304,15 +456,16 @@ block0(v0: i128):
stack_store.i128 v0, ss1+16
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #32
; nextln: add x2, sp, #32
; nextln: stp x0, x1, [x2]
; nextln: add sp, sp, #32
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #32
; block0:
; add x4, sp, #32
; stp x0, x1, [x4]
; add sp, sp, #32
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_store_big(i128) {
ss0 = explicit_slot 100000
@@ -322,20 +475,20 @@ block0(v0: i128):
stack_store.i128 v0, ss0
return
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: sub sp, sp, x16, UXTX
; nextln: mov x2, sp
; nextln: stp x0, x1, [x2]
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: add sp, sp, x16, UXTX
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; mov x4, sp
; stp x0, x1, [x4]
; movz w16, #34480
; movk w16, #1, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_load() -> i128 {
ss0 = explicit_slot 16
@@ -344,20 +497,16 @@ block0:
v0 = stack_load.i128 ss0
return v0
}
; TODO: Codegen improvement opportunities: This should be just a ldp x0, x1, [sp, #-16]
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #16
; nextln: mov x0, sp
; nextln: ldp x1, x0, [x0]
; nextln: mov x2, x0
; nextln: mov x0, x1
; nextln: mov x1, x2
; nextln: add sp, sp, #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #16
; block0:
; mov x0, sp
; ldp x0, x1, [x0]
; add sp, sp, #16
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_load_inst_offset() -> i128 {
ss0 = explicit_slot 16
@@ -367,19 +516,16 @@ block0:
v0 = stack_load.i128 ss1+16
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sub sp, sp, #32
; nextln: add x0, sp, #32
; nextln: ldp x1, x0, [x0]
; nextln: mov x2, x0
; nextln: mov x0, x1
; nextln: mov x1, x2
; nextln: add sp, sp, #32
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; sub sp, sp, #32
; block0:
; add x0, sp, #32
; ldp x0, x1, [x0]
; add sp, sp, #32
; ldp fp, lr, [sp], #16
; ret
function %i128_stack_load_big() -> i128 {
ss0 = explicit_slot 100000
@@ -389,18 +535,18 @@ block0:
v0 = stack_load.i128 ss0
return v0
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: sub sp, sp, x16, UXTX
; nextln: mov x0, sp
; nextln: ldp x1, x0, [x0]
; nextln: mov x2, x0
; nextln: mov x0, x1
; nextln: mov x1, x2
; nextln: movz w16, #34480
; nextln: movk w16, #1, LSL #16
; nextln: add sp, sp, x16, UXTX
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; movz w16, #34480
; movk w16, #1, LSL #16
; sub sp, sp, x16, UXTX
; block0:
; mov x0, sp
; ldp x0, x1, [x0]
; movz w16, #34480
; movk w16, #1, LSL #16
; add sp, sp, x16, UXTX
; ldp fp, lr, [sp], #16
; ret

View File

@@ -10,12 +10,7 @@ block0:
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: ldr x0, 8 ; b 12 ; data TestCase { length: 9, ascii: [109, 121, 95, 103, 108, 111, 98, 97, 108, 0, 0, 0, 0, 0, 0, 0] } + 0
; Inst 1: ret
; }}
; block0:
; ldr x0, 8 ; b 12 ; data TestCase { length: 9, ascii: [109, 121, 95, 103, 108, 111, 98, 97, 108, 0, 0, 0, 0, 0, 0, 0] } + 0
; ret

View File

@@ -10,28 +10,23 @@ block0(v0: i32):
return v0, v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 18)
; Inst 0: stp fp, lr, [sp, #-16]!
; Inst 1: mov fp, sp
; Inst 2: str x19, [sp, #-16]!
; Inst 3: stp d14, d15, [sp, #-16]!
; Inst 4: stp d12, d13, [sp, #-16]!
; Inst 5: stp d10, d11, [sp, #-16]!
; Inst 6: stp d8, d9, [sp, #-16]!
; Inst 7: mov x19, x0
; Inst 8: elf_tls_get_addr u1:0
; Inst 9: mov x1, x0
; Inst 10: mov x0, x19
; Inst 11: ldp d8, d9, [sp], #16
; Inst 12: ldp d10, d11, [sp], #16
; Inst 13: ldp d12, d13, [sp], #16
; Inst 14: ldp d14, d15, [sp], #16
; Inst 15: ldr x19, [sp], #16
; Inst 16: ldp fp, lr, [sp], #16
; Inst 17: ret
; }}
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x25, [sp, #-16]!
; stp d14, d15, [sp, #-16]!
; stp d12, d13, [sp, #-16]!
; stp d10, d11, [sp, #-16]!
; stp d8, d9, [sp, #-16]!
; block0:
; mov x25, x0
; elf_tls_get_addr u1:0
; mov x1, x0
; mov x0, x25
; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16
; ldp d14, d15, [sp], #16
; ldr x25, [sp], #16
; ldp fp, lr, [sp], #16
; ret

View File

@@ -7,13 +7,8 @@ block0:
trap user0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 1)
; Inst 0: udf
; }}
; block0:
; udf
function %g(i64) {
block0(v0: i64):
@@ -23,15 +18,10 @@ block0(v0: i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 3)
; Inst 0: subs xzr, x0, #42
; Inst 1: b.ne 8 ; udf
; Inst 2: ret
; }}
; block0:
; subs xzr, x0, #42
; b.ne 8 ; udf
; ret
function %h() {
block0:
@@ -39,12 +29,7 @@ block0:
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: brk #0
; Inst 1: ret
; }}
; block0:
; brk #0
; ret

View File

@@ -8,14 +8,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uxtb w0, w0
; Inst 1: ret
; }}
; block0:
; uxtb w0, w0
; ret
function %f_u_8_32(i8) -> i32 {
block0(v0: i8):
@@ -23,14 +18,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uxtb w0, w0
; Inst 1: ret
; }}
; block0:
; uxtb w0, w0
; ret
function %f_u_8_16(i8) -> i16 {
block0(v0: i8):
@@ -38,14 +28,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uxtb w0, w0
; Inst 1: ret
; }}
; block0:
; uxtb w0, w0
; ret
function %f_s_8_64(i8) -> i64 {
block0(v0: i8):
@@ -53,14 +38,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxtb x0, w0
; Inst 1: ret
; }}
; block0:
; sxtb x0, w0
; ret
function %f_s_8_32(i8) -> i32 {
block0(v0: i8):
@@ -68,14 +48,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxtb w0, w0
; Inst 1: ret
; }}
; block0:
; sxtb w0, w0
; ret
function %f_s_8_16(i8) -> i16 {
block0(v0: i8):
@@ -83,14 +58,9 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxtb w0, w0
; Inst 1: ret
; }}
; block0:
; sxtb w0, w0
; ret
function %f_u_16_64(i16) -> i64 {
block0(v0: i16):
@@ -98,14 +68,9 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uxth w0, w0
; Inst 1: ret
; }}
; block0:
; uxth w0, w0
; ret
function %f_u_16_32(i16) -> i32 {
block0(v0: i16):
@@ -113,14 +78,9 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: uxth w0, w0
; Inst 1: ret
; }}
; block0:
; uxth w0, w0
; ret
function %f_s_16_64(i16) -> i64 {
block0(v0: i16):
@@ -128,14 +88,9 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxth x0, w0
; Inst 1: ret
; }}
; block0:
; sxth x0, w0
; ret
function %f_s_16_32(i16) -> i32 {
block0(v0: i16):
@@ -143,14 +98,9 @@ block0(v0: i16):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxth w0, w0
; Inst 1: ret
; }}
; block0:
; sxth w0, w0
; ret
function %f_u_32_64(i32) -> i64 {
block0(v0: i32):
@@ -158,14 +108,9 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: mov w0, w0
; Inst 1: ret
; }}
; block0:
; mov w0, w0
; ret
function %f_s_32_64(i32) -> i64 {
block0(v0: i32):
@@ -173,12 +118,7 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 2)
; Inst 0: sxtw x0, w0
; Inst 1: ret
; }}
; block0:
; sxtw x0, w0
; ret

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,11 +11,12 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r2
; nextln: lrvgr %r3, %r3
; nextln: csg %r2, %r3, 0(%r4)
; nextln: lrvgr %r2, %r2
; nextln: br %r14
; block0:
; lrvgr %r5, %r2
; lrvgr %r3, %r3
; csg %r5, %r3, 0(%r4)
; lrvgr %r2, %r5
; br %r14
function %atomic_cas_i32(i32, i32, i64) -> i32 {
block0(v0: i32, v1: i32, v2: i64):
@@ -23,11 +24,12 @@ block0(v0: i32, v1: i32, v2: i64):
return v3
}
; check: lrvr %r2, %r2
; nextln: lrvr %r3, %r3
; nextln: cs %r2, %r3, 0(%r4)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; lrvr %r5, %r2
; lrvr %r3, %r3
; cs %r5, %r3, 0(%r4)
; lrvr %r2, %r5
; br %r14
function %atomic_cas_i16(i64, i16, i16, i64) -> i16 {
block0(v0: i64, v1: i16, v2: i16, v3: i64):
@@ -35,15 +37,20 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
return v4
}
; check: sllk %r2, %r5, 3
; nextln: nill %r5, 65532
; nextln: lrvr %r3, %r3
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r5)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rxsbg %r1, %r3, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; stmg %r6, %r15, 48(%r15)
; block0:
; lgr %r6, %r3
; sllk %r3, %r5, 3
; nill %r5, 65532
; lgr %r2, %r6
; lrvr %r2, %r2
; lrvr %r4, %r4
; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r3) ; rxsbg %r1, %r2, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r3) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r3)
; lrvr %r2, %r2
; lmg %r6, %r15, 48(%r15)
; br %r14
function %atomic_cas_i8(i64, i8, i8, i64) -> i8 {
block0(v0: i64, v1: i8, v2: i8, v3: i64):
@@ -51,13 +58,14 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
return v4
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: sllk %r2, %r5, 3
; nextln: nill %r5, 65532
; nextln: lcr %r14, %r2
; nextln: l %r0, 0(%r5)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r14) ; cs %r0, %r1, 0(%r5) ; jglh 0b
; nextln: rll %r2, %r0, 8(%r2)
; nextln: lmg %r14, %r15, 112(%r15)
; nextln: br %r14
; stmg %r12, %r15, 96(%r15)
; block0:
; sllk %r2, %r5, 3
; nill %r5, 65532
; lcr %r12, %r2
; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r12) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r2)
; lmg %r12, %r15, 96(%r15)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,8 +11,9 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: csg %r2, %r3, 0(%r4)
; nextln: br %r14
; block0:
; csg %r2, %r3, 0(%r4)
; br %r14
function %atomic_cas_i32(i32, i32, i64) -> i32 {
block0(v0: i32, v1: i32, v2: i64):
@@ -20,8 +21,9 @@ block0(v0: i32, v1: i32, v2: i64):
return v3
}
; check: cs %r2, %r3, 0(%r4)
; nextln: br %r14
; block0:
; cs %r2, %r3, 0(%r4)
; br %r14
function %atomic_cas_i16(i64, i16, i16, i64) -> i16 {
block0(v0: i64, v1: i16, v2: i16, v3: i64):
@@ -29,12 +31,13 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
return v4
}
; check: sllk %r2, %r5, 3
; nextln: nill %r5, 65532
; nextln: l %r0, 0(%r5)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r2, %r5, 3
; nill %r5, 65532
; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r2)
; br %r14
function %atomic_cas_i8(i64, i8, i8, i64) -> i8 {
block0(v0: i64, v1: i8, v2: i8, v3: i64):
@@ -42,13 +45,14 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
return v4
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: sllk %r2, %r5, 3
; nextln: nill %r5, 65532
; nextln: lcr %r14, %r2
; nextln: l %r0, 0(%r5)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r14) ; cs %r0, %r1, 0(%r5) ; jglh 0b
; nextln: rll %r2, %r0, 8(%r2)
; nextln: lmg %r14, %r15, 112(%r15)
; nextln: br %r14
; stmg %r12, %r15, 96(%r15)
; block0:
; sllk %r2, %r5, 3
; nill %r5, 65532
; lcr %r12, %r2
; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r12) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r2)
; lmg %r12, %r15, 96(%r15)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %atomic_load_i64(i64) -> i64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: lrvg %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrvg %r2, 0(%r2)
; br %r14
function %atomic_load_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
; br %r14
function %atomic_load_i32(i64) -> i32 {
block0(v0: i64):
@@ -27,8 +29,9 @@ block0(v0: i64):
return v1
}
; check: lrv %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrv %r2, 0(%r2)
; br %r14
function %atomic_load_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -38,8 +41,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; br %r14
function %atomic_load_i16(i64) -> i16 {
block0(v0: i64):
@@ -47,8 +51,9 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrvh %r2, 0(%r2)
; br %r14
function %atomic_load_i16_sym() -> i16 {
gv0 = symbol colocated %sym
@@ -58,8 +63,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; br %r14
function %atomic_load_i8(i64) -> i8 {
block0(v0: i64):
@@ -67,6 +73,7 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %atomic_load_i64(i64) -> i64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: lg %r2, 0(%r2)
; nextln: br %r14
; block0:
; lg %r2, 0(%r2)
; br %r14
function %atomic_load_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0:
return v1
}
; check: lgrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lgrl %r2, %sym + 0
; br %r14
function %atomic_load_i32(i64) -> i32 {
block0(v0: i64):
@@ -27,8 +29,9 @@ block0(v0: i64):
return v1
}
; check: l %r2, 0(%r2)
; nextln: br %r14
; block0:
; l %r2, 0(%r2)
; br %r14
function %atomic_load_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -38,8 +41,9 @@ block0:
return v1
}
; check: lrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lrl %r2, %sym + 0
; br %r14
function %atomic_load_i16(i64) -> i16 {
block0(v0: i64):
@@ -47,8 +51,9 @@ block0(v0: i64):
return v1
}
; check: llh %r2, 0(%r2)
; nextln: br %r14
; block0:
; llh %r2, 0(%r2)
; br %r14
function %atomic_load_i16_sym() -> i16 {
gv0 = symbol colocated %sym
@@ -58,8 +63,9 @@ block0:
return v1
}
; check: llhrl %r2, %sym + 0
; nextln: br %r14
; block0:
; llhrl %r2, %sym + 0
; br %r14
function %atomic_load_i8(i64) -> i8 {
block0(v0: i64):
@@ -67,6 +73,7 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x arch13
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: nngrk %r1, %r0, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: nngrk %r1, %r0, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -18,10 +19,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: nnrk %r1, %r0, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: nnrk %r1, %r0, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -29,12 +31,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -42,13 +45,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -56,11 +60,12 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: lg %r0, 0(%r3)
; nextln: 0: nngrk %r1, %r0, %r2 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; lg %r0, 0(%r3)
; 0: nngrk %r1, %r0, %r5 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -68,11 +73,12 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: nnrk %r1, %r0, %r2 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; l %r0, 0(%r3)
; 0: nnrk %r1, %r0, %r5 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -80,14 +86,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -95,11 +102,12 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,11 +11,12 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: lg %r0, 0(%r3)
; nextln: 0: csg %r0, %r2, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; lg %r0, 0(%r3)
; 0: csg %r0, %r5, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_xchg_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -23,11 +24,12 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: cs %r0, %r2, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; l %r0, 0(%r3)
; 0: cs %r0, %r5, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_xchg_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -35,14 +37,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; risbgn %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -50,18 +53,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (ADD)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_add_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -69,10 +68,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; agr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; agr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_add_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -80,10 +80,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; ar %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; ar %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_add_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -91,14 +92,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; ar %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; ar %r1, %r2 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_add_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -106,18 +108,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SUB)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_sub_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -125,10 +124,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; sgr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; sgr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_sub_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -136,10 +136,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; sr %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; sr %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_sub_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -147,14 +148,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; sr %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; sr %r1, %r2 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -162,18 +164,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (AND)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_and_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -181,10 +180,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: lang %r2, %r2, 0(%r3)
; nextln: lrvgr %r2, %r2
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; lang %r3, %r5, 0(%r3)
; lrvgr %r2, %r3
; br %r14
function %atomic_rmw_and_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -192,10 +192,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: lan %r2, %r2, 0(%r3)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; lan %r3, %r5, 0(%r3)
; lrvr %r2, %r3
; br %r14
function %atomic_rmw_and_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -203,14 +204,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_and_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -218,17 +220,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (OR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_or_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -236,10 +235,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: laog %r2, %r2, 0(%r3)
; nextln: lrvgr %r2, %r2
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; laog %r3, %r5, 0(%r3)
; lrvgr %r2, %r3
; br %r14
function %atomic_rmw_or_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -247,10 +247,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: lao %r2, %r2, 0(%r3)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; lao %r3, %r5, 0(%r3)
; lrvr %r2, %r3
; br %r14
function %atomic_rmw_or_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -258,14 +259,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rosbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; rosbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_or_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -273,18 +275,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (XOR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_xor_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -292,10 +290,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: laxg %r2, %r2, 0(%r3)
; nextln: lrvgr %r2, %r2
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; laxg %r3, %r5, 0(%r3)
; lrvgr %r2, %r3
; br %r14
function %atomic_rmw_xor_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -303,10 +302,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: lax %r2, %r2, 0(%r3)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; lax %r3, %r5, 0(%r3)
; lrvr %r2, %r3
; br %r14
function %atomic_rmw_xor_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -314,14 +314,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rxsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; rxsbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -329,17 +330,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (NAND)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -347,11 +345,12 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lrvgr %r2, %r4
; nextln: lg %r0, 0(%r3)
; nextln: 0: ngrk %r1, %r0, %r2 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lrvgr %r5, %r4
; lg %r0, 0(%r3)
; 0: ngrk %r1, %r0, %r5 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -359,11 +358,12 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: lrvr %r2, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: nrk %r1, %r0, %r2 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; lrvr %r5, %r4
; l %r0, 0(%r3)
; 0: nrk %r1, %r0, %r5 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -371,14 +371,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lrvr %r4, %r4
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lrvr %r2, %r4
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -386,17 +387,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SMIN)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -404,10 +402,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_smin_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -415,10 +414,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_smin_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -426,14 +426,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -441,18 +442,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SMAX)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -460,10 +458,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_smax_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -471,10 +470,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_smax_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -482,14 +482,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -497,18 +498,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (UMIN)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -516,10 +514,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_umin_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -527,10 +526,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_umin_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -538,14 +538,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -553,18 +554,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (UMAX)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -572,10 +570,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvgr %r2, %r0
; br %r14
function %atomic_rmw_umax_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -583,10 +582,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lrvr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lrvr %r2, %r0
; br %r14
function %atomic_rmw_umax_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -594,14 +594,15 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 0(%r2)
; nextln: lrvr %r2, %r2
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r5)
; lrvr %r2, %r2
; br %r14
function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -609,12 +610,13 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,10 +11,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_xchg_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -22,10 +23,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_xchg_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -33,12 +35,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -46,17 +49,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (ADD)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_add_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -64,8 +64,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: laag %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; laag %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_add_i32(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -73,8 +74,9 @@ block0(v0: i64, v1: i32):
return v2
}
; check: laa %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; laa %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_add_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -82,13 +84,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_add_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -96,18 +99,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SUB)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_sub_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -115,9 +115,10 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lcgr %r3, %r3
; nextln: laag %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lcgr %r3, %r3
; laag %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_sub_i32(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -125,9 +126,10 @@ block0(v0: i64, v1: i32):
return v2
}
; check: lcr %r3, %r3
; nextln: laa %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lcr %r3, %r3
; laa %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_sub_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -135,13 +137,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -149,18 +152,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (AND)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_and_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -168,8 +168,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lang %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lang %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_and_i32(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -177,8 +178,9 @@ block0(v0: i64, v1: i32):
return v2
}
; check: lan %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lan %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_and_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -186,12 +188,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_and_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -199,17 +202,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (OR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_or_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -217,8 +217,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: laog %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; laog %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_or_i32(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -226,8 +227,9 @@ block0(v0: i64, v1: i32):
return v2
}
; check: lao %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lao %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_or_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -235,12 +237,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_or_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -248,17 +251,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (XOR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_xor_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -266,8 +266,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: laxg %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; laxg %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_xor_i32(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
@@ -275,8 +276,9 @@ block0(v0: i64, v1: i32):
return v2
}
; check: lax %r2, %r3, 0(%r2)
; nextln: br %r14
; block0:
; lax %r2, %r3, 0(%r2)
; br %r14
function %atomic_rmw_xor_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -284,12 +286,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -297,17 +300,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (NAND)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -315,10 +315,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: ngrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: ngrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -326,10 +327,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: nrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: nrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -337,12 +339,13 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -350,17 +353,14 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SMIN)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; lcr %r2, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -368,10 +368,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: cgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: cgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_smin_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -379,10 +380,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: cr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: cr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_smin_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -390,13 +392,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -404,18 +407,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (SMAX)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -423,10 +423,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: cgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: cgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_smax_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -434,10 +435,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: cr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: cr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_smax_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -445,13 +447,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -459,18 +462,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (UMIN)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -478,10 +478,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: clgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: clgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_umin_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -489,10 +490,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: clr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: clr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_umin_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -500,13 +502,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -514,18 +517,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ATOMIC_RMW (UMAX)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -533,10 +533,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: lg %r0, 0(%r3)
; nextln: 0: clgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lg %r0, 0(%r3)
; 0: clgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_umax_i32(i64, i64, i32) -> i32 {
block0(v0: i64, v1: i64, v2: i32):
@@ -544,10 +545,11 @@ block0(v0: i64, v1: i64, v2: i32):
return v3
}
; check: l %r0, 0(%r3)
; nextln: 0: clr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; l %r0, 0(%r3)
; 0: clr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
; lgr %r2, %r0
; br %r14
function %atomic_rmw_umax_i16(i64, i64, i16) -> i16 {
block0(v0: i64, v1: i64, v2: i16):
@@ -555,13 +557,14 @@ block0(v0: i64, v1: i64, v2: i16):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 16
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 16(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 16
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r5)
; br %r14
function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 {
block0(v0: i64, v1: i64, v2: i8):
@@ -569,12 +572,13 @@ block0(v0: i64, v1: i64, v2: i8):
return v3
}
; check: sllk %r2, %r3, 3
; nextln: nill %r3, 65532
; nextln: sllk %r4, %r4, 24
; nextln: lcr %r5, %r2
; nextln: l %r0, 0(%r3)
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; nextln: rll %r2, %r0, 8(%r2)
; nextln: br %r14
; block0:
; sllk %r5, %r3, 3
; nill %r3, 65532
; sllk %r2, %r4, 24
; lcr %r4, %r5
; l %r0, 0(%r3)
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r5)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %atomic_store_i64(i64, i64) {
@@ -7,9 +7,10 @@ block0(v0: i64, v1: i64):
return
}
; check: strvg %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; strvg %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -19,9 +20,10 @@ block0(v0: i64):
return
}
; check: larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
; bcr 14, 0
; br %r14
function %atomic_store_imm_i64(i64) {
block0(v0: i64):
@@ -30,10 +32,11 @@ block0(v0: i64):
return
}
; check: lghi %r3, 12345
; nextln: strvg %r3, 0(%r2)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; lghi %r4, 12345
; strvg %r4, 0(%r2)
; bcr 14, 0
; br %r14
function %atomic_store_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -41,9 +44,10 @@ block0(v0: i32, v1: i64):
return
}
; check: strv %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; strv %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -53,9 +57,10 @@ block0(v0: i32):
return
}
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; bcr 14, 0
; br %r14
function %atomic_store_imm_i32(i64) {
block0(v0: i64):
@@ -64,10 +69,11 @@ block0(v0: i64):
return
}
; check: lhi %r3, 12345
; nextln: strv %r3, 0(%r2)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; lhi %r4, 12345
; strv %r4, 0(%r2)
; bcr 14, 0
; br %r14
function %atomic_store_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -75,9 +81,10 @@ block0(v0: i16, v1: i64):
return
}
; check: strvh %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; strvh %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i16_sym(i16) {
gv0 = symbol colocated %sym
@@ -87,9 +94,10 @@ block0(v0: i16):
return
}
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; bcr 14, 0
; br %r14
function %atomic_store_imm_i16(i64) {
block0(v0: i64):
@@ -98,9 +106,10 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 14640
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 14640
; bcr 14, 0
; br %r14
function %atomic_store_i8(i8, i64) {
block0(v0: i8, v1: i64):
@@ -108,9 +117,10 @@ block0(v0: i8, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_imm_i8(i64) {
block0(v0: i64):
@@ -119,7 +129,8 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; bcr 14, 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %atomic_store_i64(i64, i64) {
@@ -7,9 +7,10 @@ block0(v0: i64, v1: i64):
return
}
; check: stg %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; stg %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -19,9 +20,10 @@ block0(v0: i64):
return
}
; check: stgrl %r2, %sym + 0
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; stgrl %r2, %sym + 0
; bcr 14, 0
; br %r14
function %atomic_store_imm_i64(i64) {
block0(v0: i64):
@@ -30,9 +32,10 @@ block0(v0: i64):
return
}
; check: mvghi 0(%r2), 12345
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvghi 0(%r2), 12345
; bcr 14, 0
; br %r14
function %atomic_store_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -40,9 +43,10 @@ block0(v0: i32, v1: i64):
return
}
; check: st %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; st %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -52,9 +56,10 @@ block0(v0: i32):
return
}
; check: strl %r2, %sym + 0
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; strl %r2, %sym + 0
; bcr 14, 0
; br %r14
function %atomic_store_imm_i32(i64) {
block0(v0: i64):
@@ -63,9 +68,10 @@ block0(v0: i64):
return
}
; check: mvhi 0(%r2), 12345
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvhi 0(%r2), 12345
; bcr 14, 0
; br %r14
function %atomic_store_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -73,9 +79,10 @@ block0(v0: i16, v1: i64):
return
}
; check: sth %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; sth %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_i16_sym(i16) {
gv0 = symbol colocated %sym
@@ -85,9 +92,10 @@ block0(v0: i16):
return
}
; check: sthrl %r2, %sym + 0
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; sthrl %r2, %sym + 0
; bcr 14, 0
; br %r14
function %atomic_store_imm_i16(i64) {
block0(v0: i64):
@@ -96,9 +104,10 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 12345
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 12345
; bcr 14, 0
; br %r14
function %atomic_store_i8(i8, i64) {
block0(v0: i8, v1: i64):
@@ -106,9 +115,10 @@ block0(v0: i8, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; bcr 14, 0
; br %r14
function %atomic_store_imm_i8(i64) {
block0(v0: i64):
@@ -117,7 +127,8 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: bcr 14, 0
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; bcr 14, 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x arch13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,8 +11,9 @@ block0(v0: i64):
return v1
}
; check: popcnt %r2, %r2, 8
; nextln: br %r14
; block0:
; popcnt %r2, %r2, 8
; br %r14
function %popcnt_i32(i32) -> i32 {
block0(v0: i32):
@@ -20,9 +21,10 @@ block0(v0: i32):
return v1
}
; check: llgfr %r2, %r2
; nextln: popcnt %r2, %r2, 8
; nextln: br %r14
; block0:
; llgfr %r5, %r2
; popcnt %r2, %r5, 8
; br %r14
function %popcnt_i16(i16) -> i16 {
block0(v0: i16):
@@ -30,9 +32,10 @@ block0(v0: i16):
return v1
}
; check: llghr %r2, %r2
; nextln: popcnt %r2, %r2, 8
; nextln: br %r14
; block0:
; llghr %r5, %r2
; popcnt %r2, %r5, 8
; br %r14
function %popcnt_i8(i8) -> i8 {
block0(v0: i8):
@@ -40,5 +43,7 @@ block0(v0: i8):
return v1
}
; check: popcnt %r2, %r2
; nextln: br %r14
; block0:
; popcnt %r2, %r2
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -42,9 +42,10 @@ block0(v0: i64):
return v1
}
; check: flogr %r0, %r2
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; flogr %r0, %r2
; lgr %r2, %r0
; br %r14
function %clz_i32(i32) -> i32 {
block0(v0: i32):
@@ -52,10 +53,11 @@ block0(v0: i32):
return v1
}
; check: llgfr %r2, %r2
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -32
; nextln: br %r14
; block0:
; llgfr %r5, %r2
; flogr %r0, %r5
; ahik %r2, %r0, -32
; br %r14
function %clz_i16(i16) -> i16 {
block0(v0: i16):
@@ -63,10 +65,11 @@ block0(v0: i16):
return v1
}
; check: llghr %r2, %r2
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -48
; nextln: br %r14
; block0:
; llghr %r5, %r2
; flogr %r0, %r5
; ahik %r2, %r0, -48
; br %r14
function %clz_i8(i8) -> i8 {
block0(v0: i8):
@@ -74,14 +77,11 @@ block0(v0: i8):
return v1
}
; check: llgcr %r2, %r2
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -56
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CLS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llgcr %r5, %r2
; flogr %r0, %r5
; ahik %r2, %r0, -56
; br %r14
function %cls_i64(i64) -> i64 {
block0(v0: i64):
@@ -89,11 +89,12 @@ block0(v0: i64):
return v1
}
; check: srag %r3, %r2, 63
; nextln: xgr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; srag %r5, %r2, 63
; xgrk %r3, %r2, %r5
; flogr %r0, %r3
; lgr %r2, %r0
; br %r14
function %cls_i32(i32) -> i32 {
block0(v0: i32):
@@ -101,12 +102,13 @@ block0(v0: i32):
return v1
}
; check: lgfr %r2, %r2
; nextln: srag %r3, %r2, 63
; nextln: xgr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -32
; nextln: br %r14
; block0:
; lgfr %r5, %r2
; srag %r3, %r5, 63
; xgr %r5, %r3
; flogr %r0, %r5
; ahik %r2, %r0, -32
; br %r14
function %cls_i16(i16) -> i16 {
block0(v0: i16):
@@ -114,12 +116,13 @@ block0(v0: i16):
return v1
}
; check: lghr %r2, %r2
; nextln: srag %r3, %r2, 63
; nextln: xgr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -48
; nextln: br %r14
; block0:
; lghr %r5, %r2
; srag %r3, %r5, 63
; xgr %r5, %r3
; flogr %r0, %r5
; ahik %r2, %r0, -48
; br %r14
function %cls_i8(i8) -> i8 {
block0(v0: i8):
@@ -127,16 +130,13 @@ block0(v0: i8):
return v1
}
; check: lgbr %r2, %r2
; nextln: srag %r3, %r2, 63
; nextln: xgr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: ahik %r2, %r0, -56
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CTZ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lgbr %r5, %r2
; srag %r3, %r5, 63
; xgr %r5, %r3
; flogr %r0, %r5
; ahik %r2, %r0, -56
; br %r14
function %ctz_i64(i64) -> i64 {
block0(v0: i64):
@@ -144,13 +144,14 @@ block0(v0: i64):
return v1
}
; check: lcgr %r3, %r2
; nextln: ngr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: locghie %r0, -1
; nextln: lghi %r2, 63
; nextln: sgr %r2, %r0
; nextln: br %r14
; block0:
; lcgr %r5, %r2
; ngrk %r3, %r2, %r5
; flogr %r0, %r3
; locghie %r0, -1
; lghi %r3, 63
; sgrk %r2, %r3, %r0
; br %r14
function %ctz_i32(i32) -> i32 {
block0(v0: i32):
@@ -158,13 +159,14 @@ block0(v0: i32):
return v1
}
; check: oihl %r2, 1
; nextln: lcgr %r3, %r2
; nextln: ngr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: lhi %r2, 63
; nextln: sr %r2, %r0
; nextln: br %r14
; block0:
; oihl %r2, 1
; lcgr %r4, %r2
; ngr %r2, %r4
; flogr %r0, %r2
; lhi %r5, 63
; srk %r2, %r5, %r0
; br %r14
function %ctz_i16(i16) -> i16 {
block0(v0: i16):
@@ -172,13 +174,14 @@ block0(v0: i16):
return v1
}
; check: oilh %r2, 1
; nextln: lcgr %r3, %r2
; nextln: ngr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: lhi %r2, 63
; nextln: sr %r2, %r0
; nextln: br %r14
; block0:
; oilh %r2, 1
; lcgr %r4, %r2
; ngr %r2, %r4
; flogr %r0, %r2
; lhi %r5, 63
; srk %r2, %r5, %r0
; br %r14
function %ctz_i8(i8) -> i8 {
block0(v0: i8):
@@ -186,17 +189,14 @@ block0(v0: i8):
return v1
}
; check: oill %r2, 256
; nextln: lcgr %r3, %r2
; nextln: ngr %r2, %r3
; nextln: flogr %r0, %r2
; nextln: lhi %r2, 63
; nextln: sr %r2, %r0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; POPCNT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; oill %r2, 256
; lcgr %r4, %r2
; ngr %r2, %r4
; flogr %r0, %r2
; lhi %r5, 63
; srk %r2, %r5, %r0
; br %r14
function %popcnt_i64(i64) -> i64 {
block0(v0: i64):
@@ -204,15 +204,16 @@ block0(v0: i64):
return v1
}
; check: popcnt %r2, %r2
; nextln: sllg %r3, %r2, 32
; nextln: agr %r2, %r3
; nextln: sllg %r3, %r2, 16
; nextln: agr %r2, %r3
; nextln: sllg %r3, %r2, 8
; nextln: agr %r2, %r3
; nextln: srlg %r2, %r2, 56
; nextln: br %r14
; block0:
; popcnt %r5, %r2
; sllg %r3, %r5, 32
; agr %r5, %r3
; sllg %r3, %r5, 16
; agr %r5, %r3
; sllg %r3, %r5, 8
; agr %r5, %r3
; srlg %r2, %r5, 56
; br %r14
function %popcnt_i32(i32) -> i32 {
block0(v0: i32):
@@ -220,13 +221,14 @@ block0(v0: i32):
return v1
}
; check: popcnt %r2, %r2
; nextln: sllk %r3, %r2, 16
; nextln: ar %r2, %r3
; nextln: sllk %r3, %r2, 8
; nextln: ar %r2, %r3
; nextln: srlk %r2, %r2, 24
; nextln: br %r14
; block0:
; popcnt %r5, %r2
; sllk %r3, %r5, 16
; ar %r5, %r3
; sllk %r3, %r5, 8
; ar %r5, %r3
; srlk %r2, %r5, 24
; br %r14
function %popcnt_i16(i16) -> i16 {
block0(v0: i16):
@@ -234,11 +236,12 @@ block0(v0: i16):
return v1
}
; check: popcnt %r2, %r2
; nextln: sllk %r3, %r2, 8
; nextln: ar %r2, %r3
; nextln: srlk %r2, %r2, 8
; nextln: br %r14
; block0:
; popcnt %r5, %r2
; sllk %r3, %r5, 8
; ar %r5, %r3
; srlk %r2, %r5, 8
; br %r14
function %popcnt_i8(i8) -> i8 {
block0(v0: i8):
@@ -246,5 +249,7 @@ block0(v0: i8):
return v1
}
; check: popcnt %r2, %r2
; nextln: br %r14
; block0:
; popcnt %r2, %r2
; br %r14

View File

@@ -1,5 +1,5 @@
test compile
test compile precise-output
target s390x arch13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -12,8 +12,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: nngrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nngrk %r2, %r2, %r3
; br %r14
function %band_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -21,8 +22,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: nnrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nnrk %r2, %r2, %r3
; br %r14
function %band_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -30,8 +32,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nnrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nnrk %r2, %r2, %r3
; br %r14
function %band_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -39,12 +42,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nnrk %r2, %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BOR_NOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; nnrk %r2, %r2, %r3
; br %r14
function %bor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -52,8 +52,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: nogrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nogrk %r2, %r2, %r3
; br %r14
function %bor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -61,8 +62,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: nork %r2, %r2, %r3
; nextln: br %r14
; block0:
; nork %r2, %r2, %r3
; br %r14
function %bor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -70,8 +72,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nork %r2, %r2, %r3
; nextln: br %r14
; block0:
; nork %r2, %r2, %r3
; br %r14
function %bor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -79,12 +82,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nork %r2, %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BXOR_NOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; nork %r2, %r2, %r3
; br %r14
function %bxor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -92,8 +92,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: nxgrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nxgrk %r2, %r2, %r3
; br %r14
function %bxor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -101,8 +102,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: nxrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nxrk %r2, %r2, %r3
; br %r14
function %bxor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -110,8 +112,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nxrk %r2, %r2, %r3
; nextln: br %r14
; block0:
; nxrk %r2, %r2, %r3
; br %r14
function %bxor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -119,12 +122,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nxrk %r2, %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BNOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; nxrk %r2, %r2, %r3
; br %r14
function %bnot_i64(i64) -> i64 {
block0(v0: i64):
@@ -132,8 +132,9 @@ block0(v0: i64):
return v1
}
; check: nogrk %r2, %r2, %r2
; nextln: br %r14
; block0:
; nogrk %r2, %r2, %r2
; br %r14
function %bnot_i32(i32) -> i32 {
block0(v0: i32):
@@ -141,8 +142,9 @@ block0(v0: i32):
return v1
}
; check: nork %r2, %r2, %r2
; nextln: br %r14
; block0:
; nork %r2, %r2, %r2
; br %r14
function %bnot_i16(i16) -> i16 {
block0(v0: i16):
@@ -150,8 +152,9 @@ block0(v0: i16):
return v1
}
; check: nork %r2, %r2, %r2
; nextln: br %r14
; block0:
; nork %r2, %r2, %r2
; br %r14
function %bnot_i8(i8) -> i8 {
block0(v0: i8):
@@ -159,12 +162,9 @@ block0(v0: i8):
return v1
}
; check: nork %r2, %r2, %r2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BITSELECT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; nork %r2, %r2, %r2
; br %r14
function %bitselect_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -172,10 +172,11 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: ngr %r3, %r2
; nextln: nngrk %r2, %r4, %r2
; nextln: ogr %r2, %r3
; nextln: br %r14
; block0:
; ngrk %r5, %r3, %r2
; nngrk %r3, %r4, %r2
; ogrk %r2, %r3, %r5
; br %r14
function %bitselect_i32(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
@@ -183,10 +184,11 @@ block0(v0: i32, v1: i32, v2: i32):
return v3
}
; check: nr %r3, %r2
; nextln: nnrk %r2, %r4, %r2
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nnrk %r3, %r4, %r2
; ork %r2, %r3, %r5
; br %r14
function %bitselect_i16(i16, i16, i16) -> i16 {
block0(v0: i16, v1: i16, v2: i16):
@@ -194,10 +196,11 @@ block0(v0: i16, v1: i16, v2: i16):
return v3
}
; check: nr %r3, %r2
; nextln: nnrk %r2, %r4, %r2
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nnrk %r3, %r4, %r2
; ork %r2, %r3, %r5
; br %r14
function %bitselect_i8(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
@@ -205,8 +208,9 @@ block0(v0: i8, v1: i8, v2: i8):
return v3
}
; check: nr %r3, %r2
; nextln: nnrk %r2, %r4, %r2
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nnrk %r3, %r4, %r2
; ork %r2, %r3, %r5
; br %r14

View File

@@ -1,5 +1,5 @@
test compile
test compile precise-output
target s390x
; FIXME: add immediate operand versions
@@ -14,8 +14,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: ngr %r2, %r3
; nextln: br %r14
; block0:
; ngr %r2, %r3
; br %r14
function %band_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -24,8 +25,9 @@ block0(v0: i64, v1: i64):
return v3
}
; check: ng %r2, 0(%r3)
; nextln: br %r14
; block0:
; ng %r2, 0(%r3)
; br %r14
function %band_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -33,8 +35,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: nr %r2, %r3
; nextln: br %r14
; block0:
; nr %r2, %r3
; br %r14
function %band_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -43,8 +46,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: n %r2, 0(%r3)
; nextln: br %r14
; block0:
; n %r2, 0(%r3)
; br %r14
function %band_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -53,8 +57,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: ny %r2, 4096(%r3)
; nextln: br %r14
; block0:
; ny %r2, 4096(%r3)
; br %r14
function %band_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -62,8 +67,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nr %r2, %r3
; nextln: br %r14
; block0:
; nr %r2, %r3
; br %r14
function %band_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
@@ -72,9 +78,10 @@ block0(v0: i16, v1: i64):
return v3
}
; check: llh %r3, 0(%r3)
; nextln: nr %r2, %r3
; nextln: br %r14
; block0:
; llh %r4, 0(%r3)
; nr %r2, %r4
; br %r14
function %band_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -82,8 +89,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nr %r2, %r3
; nextln: br %r14
; block0:
; nr %r2, %r3
; br %r14
function %band_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
@@ -92,13 +100,10 @@ block0(v0: i8, v1: i64):
return v3
}
; check: llc %r3, 0(%r3)
; nextln: nr %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BOR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llc %r4, 0(%r3)
; nr %r2, %r4
; br %r14
function %bor_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -106,8 +111,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: ogr %r2, %r3
; nextln: br %r14
; block0:
; ogr %r2, %r3
; br %r14
function %bor_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -116,8 +122,9 @@ block0(v0: i64, v1: i64):
return v3
}
; check: og %r2, 0(%r3)
; nextln: br %r14
; block0:
; og %r2, 0(%r3)
; br %r14
function %bor_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -125,8 +132,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: or %r2, %r3
; nextln: br %r14
; block0:
; or %r2, %r3
; br %r14
function %bor_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -135,8 +143,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: o %r2, 0(%r3)
; nextln: br %r14
; block0:
; o %r2, 0(%r3)
; br %r14
function %bor_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -145,8 +154,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: oy %r2, 4096(%r3)
; nextln: br %r14
; block0:
; oy %r2, 4096(%r3)
; br %r14
function %bor_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -154,8 +164,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: or %r2, %r3
; nextln: br %r14
; block0:
; or %r2, %r3
; br %r14
function %bor_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
@@ -164,9 +175,10 @@ block0(v0: i16, v1: i64):
return v3
}
; check: llh %r3, 0(%r3)
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; llh %r4, 0(%r3)
; or %r2, %r4
; br %r14
function %bor_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -174,8 +186,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: or %r2, %r3
; nextln: br %r14
; block0:
; or %r2, %r3
; br %r14
function %bor_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
@@ -184,13 +197,10 @@ block0(v0: i8, v1: i64):
return v3
}
; check: llc %r3, 0(%r3)
; nextln: or %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BXOR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llc %r4, 0(%r3)
; or %r2, %r4
; br %r14
function %bxor_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -198,8 +208,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: xgr %r2, %r3
; nextln: br %r14
; block0:
; xgr %r2, %r3
; br %r14
function %bxor_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -208,8 +219,9 @@ block0(v0: i64, v1: i64):
return v3
}
; check: xg %r2, 0(%r3)
; nextln: br %r14
; block0:
; xg %r2, 0(%r3)
; br %r14
function %bxor_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -217,8 +229,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: xr %r2, %r3
; nextln: br %r14
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -227,8 +240,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: x %r2, 0(%r3)
; nextln: br %r14
; block0:
; x %r2, 0(%r3)
; br %r14
function %bxor_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
@@ -237,8 +251,9 @@ block0(v0: i32, v1: i64):
return v3
}
; check: xy %r2, 4096(%r3)
; nextln: br %r14
; block0:
; xy %r2, 4096(%r3)
; br %r14
function %bxor_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -246,8 +261,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: xr %r2, %r3
; nextln: br %r14
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
@@ -256,9 +272,10 @@ block0(v0: i16, v1: i64):
return v3
}
; check: llh %r3, 0(%r3)
; nextln: xr %r2, %r3
; nextln: br %r14
; block0:
; llh %r4, 0(%r3)
; xr %r2, %r4
; br %r14
function %bxor_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -266,8 +283,9 @@ block0(v0: i8, v1: i8):
return v2
}
; check: xr %r2, %r3
; nextln: br %r14
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
@@ -276,13 +294,10 @@ block0(v0: i8, v1: i64):
return v3
}
; check: llc %r3, 0(%r3)
; nextln: xr %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BAND_NOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llc %r4, 0(%r3)
; xr %r2, %r4
; br %r14
function %band_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -290,10 +305,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: ngr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: xihf %r2, 4294967295
; nextln: br %r14
; block0:
; ngr %r2, %r3
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; br %r14
function %band_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -301,9 +317,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: nr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; nr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %band_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -311,9 +328,10 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; nr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %band_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -321,13 +339,10 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BOR_NOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; nr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -335,10 +350,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: ogr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: xihf %r2, 4294967295
; nextln: br %r14
; block0:
; ogr %r2, %r3
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; br %r14
function %bor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -346,9 +362,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: or %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; or %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -356,9 +373,10 @@ block0(v0: i16, v1: i16):
return v2
}
; check: or %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; or %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -366,13 +384,10 @@ block0(v0: i8, v1: i8):
return v2
}
; check: or %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BXOR_NOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; or %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bxor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -380,10 +395,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: xgr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: xihf %r2, 4294967295
; nextln: br %r14
; block0:
; xgr %r2, %r3
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; br %r14
function %bxor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -391,9 +407,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: xr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; xr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bxor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -401,9 +418,10 @@ block0(v0: i16, v1: i16):
return v2
}
; check: xr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; xr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bxor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -411,13 +429,10 @@ block0(v0: i8, v1: i8):
return v2
}
; check: xr %r2, %r3
; nextln: xilf %r2, 4294967295
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BNOT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; xr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bnot_i64(i64) -> i64 {
block0(v0: i64):
@@ -425,9 +440,10 @@ block0(v0: i64):
return v1
}
; check: xilf %r2, 4294967295
; nextln: xihf %r2, 4294967295
; nextln: br %r14
; block0:
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; br %r14
function %bnot_i32(i32) -> i32 {
block0(v0: i32):
@@ -435,8 +451,9 @@ block0(v0: i32):
return v1
}
; check: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; xilf %r2, 4294967295
; br %r14
function %bnot_i16(i16) -> i16 {
block0(v0: i16):
@@ -444,8 +461,9 @@ block0(v0: i16):
return v1
}
; check: xilf %r2, 4294967295
; nextln: br %r14
; block0:
; xilf %r2, 4294967295
; br %r14
function %bnot_i8(i8) -> i8 {
block0(v0: i8):
@@ -453,12 +471,9 @@ block0(v0: i8):
return v1
}
; check: xilf %r2, 4294967295
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BITSELECT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; xilf %r2, 4294967295
; br %r14
function %bitselect_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
@@ -466,12 +481,13 @@ block0(v0: i64, v1: i64, v2: i64):
return v3
}
; check: ngr %r3, %r2
; nextln: ngrk %r2, %r4, %r2
; nextln: xilf %r2, 4294967295
; nextln: xihf %r2, 4294967295
; nextln: ogr %r2, %r3
; nextln: br %r14
; block0:
; ngrk %r5, %r3, %r2
; ngrk %r3, %r4, %r2
; xilf %r3, 4294967295
; xihf %r3, 4294967295
; ogrk %r2, %r3, %r5
; br %r14
function %bitselect_i32(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
@@ -479,11 +495,12 @@ block0(v0: i32, v1: i32, v2: i32):
return v3
}
; check: nr %r3, %r2
; nextln: nrk %r2, %r4, %r2
; nextln: xilf %r2, 4294967295
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nrk %r3, %r4, %r2
; xilf %r3, 4294967295
; ork %r2, %r3, %r5
; br %r14
function %bitselect_i16(i16, i16, i16) -> i16 {
block0(v0: i16, v1: i16, v2: i16):
@@ -491,11 +508,12 @@ block0(v0: i16, v1: i16, v2: i16):
return v3
}
; check: nr %r3, %r2
; nextln: nrk %r2, %r4, %r2
; nextln: xilf %r2, 4294967295
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nrk %r3, %r4, %r2
; xilf %r3, 4294967295
; ork %r2, %r3, %r5
; br %r14
function %bitselect_i8(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
@@ -503,9 +521,10 @@ block0(v0: i8, v1: i8, v2: i8):
return v3
}
; check: nr %r3, %r2
; nextln: nrk %r2, %r4, %r2
; nextln: xilf %r2, 4294967295
; nextln: or %r2, %r3
; nextln: br %r14
; block0:
; nrk %r5, %r3, %r2
; nrk %r3, %r4, %r2
; xilf %r3, 4294967295
; ork %r2, %r3, %r5
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -13,13 +13,14 @@ block0(v0: i64):
return v1
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; nextln: basr %r14, %r3
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; basr %r14, %r3
; lmg %r14, %r15, 272(%r15)
; br %r14
function %call_uext(i32) -> i64 {
fn0 = %g(i32 uext) -> i64
@@ -29,22 +30,24 @@ block0(v0: i32):
return v1
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: llgfr %r2, %r2
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; nextln: basr %r14, %r3
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; llgfr %r2, %r2
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; basr %r14, %r3
; lmg %r14, %r15, 272(%r15)
; br %r14
function %ret_uext(i32) -> i32 uext {
block0(v0: i32):
return v0
}
; check: llgfr %r2, %r2
; nextln: br %r14
; block0:
; llgfr %r2, %r2
; br %r14
function %call_uext(i32) -> i64 {
fn0 = %g(i32 sext) -> i64
@@ -54,22 +57,24 @@ block0(v0: i32):
return v1
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: lgfr %r2, %r2
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; nextln: basr %r14, %r3
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; lgfr %r2, %r2
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; basr %r14, %r3
; lmg %r14, %r15, 272(%r15)
; br %r14
function %ret_uext(i32) -> i32 sext {
block0(v0: i32):
return v0
}
; check: lgfr %r2, %r2
; nextln: br %r14
; block0:
; lgfr %r2, %r2
; br %r14
function %call_colocated(i64) -> i64 {
fn0 = colocated %g(i64) -> i64
@@ -79,12 +84,13 @@ block0(v0: i64):
return v1
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: brasl %r14, %g
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; brasl %r14, %g
; lmg %r14, %r15, 272(%r15)
; br %r14
function %f2(i32) -> i64 {
fn0 = %g(i32 uext) -> i64
@@ -94,9 +100,15 @@ block0(v0: i32):
return v1
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CALL_INDIRECT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; llgfr %r2, %r2
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
; basr %r14, %r3
; lmg %r14, %r15, 272(%r15)
; br %r14
function %call_indirect(i64, i64) -> i64 {
sig0 = (i64) -> i64
@@ -105,9 +117,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: basr %r14, %r3
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; basr %r14, %r3
; lmg %r14, %r15, 272(%r15)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %f(i64, i64) -> b1 {
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: clgr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochie %r2, 1
; nextln: br %r14
; block0:
; clgr %r2, %r3
; lhi %r2, 0
; lochie %r2, 1
; br %r14
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -27,15 +28,15 @@ block2:
return v5
}
; check: Block 0:
; check: clgr %r2, %r3
; nextln: jge label1 ; jg label2
; check: Block 1:
; check: lghi %r2, 1
; nextln: br %r14
; check: Block 2:
; check: lghi %r2, 2
; nextln: br %r14
; block0:
; clgr %r2, %r3
; jge label1 ; jg label2
; block1:
; lghi %r2, 1
; br %r14
; block2:
; lghi %r2, 2
; br %r14
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -48,15 +49,14 @@ block1:
return v4
}
; FIXME: Should optimize away branches
; block0:
; clgr %r2, %r3
; jge label1 ; jg label2
; block1:
; jg label3
; block2:
; jg label3
; block3:
; lghi %r2, 1
; br %r14
; check: Block 0:
; check: clgr %r2, %r3
; nextln: jge label1 ; jg label2
; check: Block 1:
; check: jg label3
; check: Block 2:
; check: jg label3
; check: Block 3:
; check: lghi %r2, 1
; nextln: br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %f(i8, i64, i64) -> i64 {
@@ -9,11 +9,12 @@ block0(v0: i8, v1: i64, v2: i64):
return v5
}
; check: llcr %r2, %r2
; nextln: clfi %r2, 42
; nextln: locgre %r4, %r3
; nextln: lgr %r2, %r4
; nextln: br %r14
; block0:
; llcr %r5, %r2
; clfi %r5, 42
; lgr %r2, %r4
; locgre %r2, %r3
; br %r14
function %g(b1, i8, i8) -> i8 {
block0(v0: b1, v1: i8, v2: i8):
@@ -21,13 +22,12 @@ block0(v0: b1, v1: i8, v2: i8):
return v3
}
; FIXME: optimize i8/i16 compares
; check: llcr %r2, %r2
; nextln: chi %r2, 0
; nextln: locrlh %r4, %r3
; nextln: lr %r2, %r4
; nextln: br %r14
; block0:
; llcr %r5, %r2
; chi %r5, 0
; lgr %r2, %r4
; locrlh %r2, %r3
; br %r14
function %i(i32, i8, i8) -> i8 {
block0(v0: i32, v1: i8, v2: i8):
@@ -37,7 +37,9 @@ block0(v0: i32, v1: i8, v2: i8):
return v5
}
; check: clfi %r2, 42
; nextln: locre %r4, %r3
; nextln: lr %r2, %r4
; nextln: br %r14
; block0:
; clfi %r2, 42
; lgr %r2, %r4
; locre %r2, %r3
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %f() -> b8 {
@@ -7,8 +7,9 @@ block0:
return v0
}
; check: lhi %r2, 255
; nextln: br %r14
; block0:
; lhi %r2, 255
; br %r14
function %f() -> b16 {
block0:
@@ -16,8 +17,9 @@ block0:
return v0
}
; check: lhi %r2, 0
; nextln: br %r14
; block0:
; lhi %r2, 0
; br %r14
function %f() -> i64 {
block0:
@@ -25,8 +27,9 @@ block0:
return v0
}
; check: lghi %r2, 0
; nextln: br %r14
; block0:
; lghi %r2, 0
; br %r14
function %f() -> i64 {
block0:
@@ -34,8 +37,9 @@ block0:
return v0
}
; check: lgfi %r2, 65535
; nextln: br %r14
; block0:
; lgfi %r2, 65535
; br %r14
function %f() -> i64 {
block0:
@@ -43,8 +47,9 @@ block0:
return v0
}
; check: llilh %r2, 65535
; nextln: br %r14
; block0:
; llilh %r2, 65535
; br %r14
function %f() -> i64 {
block0:
@@ -52,8 +57,9 @@ block0:
return v0
}
; check: llihl %r2, 65535
; nextln: br %r14
; block0:
; llihl %r2, 65535
; br %r14
function %f() -> i64 {
block0:
@@ -61,8 +67,9 @@ block0:
return v0
}
; check: llihh %r2, 65535
; nextln: br %r14
; block0:
; llihh %r2, 65535
; br %r14
function %f() -> i64 {
block0:
@@ -70,8 +77,9 @@ block0:
return v0
}
; check: lghi %r2, -1
; nextln: br %r14
; block0:
; lghi %r2, -1
; br %r14
function %f() -> i64 {
block0:
@@ -79,28 +87,31 @@ block0:
return v0
}
; check: lgfi %r2, -65536
; nextln: br %r14
; block0:
; lgfi %r2, -65536
; br %r14
function %f() -> i64 {
block0:
v0 = iconst.i64 0xf34bf0a31212003a ; random digits
v0 = iconst.i64 0xf34bf0a31212003a ;; random digits
return v0
}
; check: llihf %r2, 4081840291
; nextln: iilf %r2, 303169594
; nextln: br %r14
; block0:
; llihf %r2, 4081840291
; iilf %r2, 303169594
; br %r14
function %f() -> i64 {
block0:
v0 = iconst.i64 0x12e900001ef40000 ; random digits with 2 clear half words
v0 = iconst.i64 0x12e900001ef40000 ;; random digits with 2 clear half words
return v0
}
; check: llihh %r2, 4841
; nextln: iilh %r2, 7924
; nextln: br %r14
; block0:
; llihh %r2, 4841
; iilh %r2, 7924
; br %r14
function %f() -> i32 {
block0:
@@ -108,6 +119,7 @@ block0:
return v0
}
; check: lhi %r2, -1
; nextln: br %r14
; block0:
; lhi %r2, -1
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,8 +11,9 @@ block0(v0: i32):
return v1
}
; check: llgfr %r2, %r2
; nextln: br %r14
; block0:
; llgfr %r2, %r2
; br %r14
function %uextend_i16_i64(i16) -> i64 {
block0(v0: i16):
@@ -20,8 +21,9 @@ block0(v0: i16):
return v1
}
; check: llghr %r2, %r2
; nextln: br %r14
; block0:
; llghr %r2, %r2
; br %r14
function %uextend_i16_i32(i16) -> i32 {
block0(v0: i16):
@@ -29,8 +31,9 @@ block0(v0: i16):
return v1
}
; check: llhr %r2, %r2
; nextln: br %r14
; block0:
; llhr %r2, %r2
; br %r14
function %uextend_i8_i64(i8) -> i64 {
block0(v0: i8):
@@ -38,8 +41,9 @@ block0(v0: i8):
return v1
}
; check: llgcr %r2, %r2
; nextln: br %r14
; block0:
; llgcr %r2, %r2
; br %r14
function %uextend_i8_i32(i8) -> i32 {
block0(v0: i8):
@@ -47,8 +51,9 @@ block0(v0: i8):
return v1
}
; check: llcr %r2, %r2
; nextln: br %r14
; block0:
; llcr %r2, %r2
; br %r14
function %uextend_i8_i16(i8) -> i16 {
block0(v0: i8):
@@ -56,13 +61,9 @@ block0(v0: i8):
return v1
}
; check: llcr %r2, %r2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SEXTEND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llcr %r2, %r2
; br %r14
function %sextend_i32_i64(i32) -> i64 {
block0(v0: i32):
@@ -70,8 +71,9 @@ block0(v0: i32):
return v1
}
; check: lgfr %r2, %r2
; nextln: br %r14
; block0:
; lgfr %r2, %r2
; br %r14
function %sextend_i16_i64(i16) -> i64 {
block0(v0: i16):
@@ -79,8 +81,9 @@ block0(v0: i16):
return v1
}
; check: lghr %r2, %r2
; nextln: br %r14
; block0:
; lghr %r2, %r2
; br %r14
function %sextend_i16_i32(i16) -> i32 {
block0(v0: i16):
@@ -88,8 +91,9 @@ block0(v0: i16):
return v1
}
; check: lhr %r2, %r2
; nextln: br %r14
; block0:
; lhr %r2, %r2
; br %r14
function %sextend_i8_i64(i8) -> i64 {
block0(v0: i8):
@@ -97,8 +101,9 @@ block0(v0: i8):
return v1
}
; check: lgbr %r2, %r2
; nextln: br %r14
; block0:
; lgbr %r2, %r2
; br %r14
function %sextend_i8_i32(i8) -> i32 {
block0(v0: i8):
@@ -106,8 +111,9 @@ block0(v0: i8):
return v1
}
; check: lbr %r2, %r2
; nextln: br %r14
; block0:
; lbr %r2, %r2
; br %r14
function %sextend_i8_i16(i8) -> i16 {
block0(v0: i8):
@@ -115,13 +121,9 @@ block0(v0: i8):
return v1
}
; check: lbr %r2, %r2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IREDUCE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lbr %r2, %r2
; br %r14
function %ireduce_i64_i32(i64, i64) -> i32 {
block0(v0: i64, v1: i64):
@@ -129,8 +131,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %ireduce_i64_i16(i64, i64) -> i16 {
block0(v0: i64, v1: i64):
@@ -138,8 +141,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %ireduce_i64_i8(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
@@ -147,8 +151,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %ireduce_i32_i16(i32, i32) -> i16 {
block0(v0: i32, v1: i32):
@@ -156,8 +161,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %ireduce_i32_i8(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
@@ -165,8 +171,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %ireduce_i16_i8(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
@@ -174,12 +181,9 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BEXTEND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lgr %r2, %r3
; br %r14
function %bextend_b32_b64(b32) -> b64 {
block0(v0: b32):
@@ -187,8 +191,9 @@ block0(v0: b32):
return v1
}
; check: lgfr %r2, %r2
; nextln: br %r14
; block0:
; lgfr %r2, %r2
; br %r14
function %bextend_b16_b64(b16) -> b64 {
block0(v0: b16):
@@ -196,8 +201,9 @@ block0(v0: b16):
return v1
}
; check: lghr %r2, %r2
; nextln: br %r14
; block0:
; lghr %r2, %r2
; br %r14
function %bextend_b16_b32(b16) -> b32 {
block0(v0: b16):
@@ -205,8 +211,9 @@ block0(v0: b16):
return v1
}
; check: lhr %r2, %r2
; nextln: br %r14
; block0:
; lhr %r2, %r2
; br %r14
function %bextend_b8_b64(b8) -> b64 {
block0(v0: b8):
@@ -214,8 +221,9 @@ block0(v0: b8):
return v1
}
; check: lgbr %r2, %r2
; nextln: br %r14
; block0:
; lgbr %r2, %r2
; br %r14
function %bextend_b8_b32(b8) -> b32 {
block0(v0: b8):
@@ -223,8 +231,9 @@ block0(v0: b8):
return v1
}
; check: lbr %r2, %r2
; nextln: br %r14
; block0:
; lbr %r2, %r2
; br %r14
function %bextend_b8_b16(b8) -> b16 {
block0(v0: b8):
@@ -232,8 +241,9 @@ block0(v0: b8):
return v1
}
; check: lbr %r2, %r2
; nextln: br %r14
; block0:
; lbr %r2, %r2
; br %r14
function %bextend_b1_b64(b1) -> b64 {
block0(v0: b1):
@@ -241,9 +251,10 @@ block0(v0: b1):
return v1
}
; check: sllg %r2, %r2, 63
; nextln: srag %r2, %r2, 63
; nextln: br %r14
; block0:
; sllg %r5, %r2, 63
; srag %r2, %r5, 63
; br %r14
function %bextend_b1_b32(b1) -> b32 {
block0(v0: b1):
@@ -251,9 +262,10 @@ block0(v0: b1):
return v1
}
; check: sllk %r2, %r2, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
; block0:
; sllk %r5, %r2, 31
; srak %r2, %r5, 31
; br %r14
function %bextend_b1_b16(b1) -> b16 {
block0(v0: b1):
@@ -261,9 +273,10 @@ block0(v0: b1):
return v1
}
; check: sllk %r2, %r2, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
; block0:
; sllk %r5, %r2, 31
; srak %r2, %r5, 31
; br %r14
function %bextend_b1_b8(b1) -> b8 {
block0(v0: b1):
@@ -271,13 +284,10 @@ block0(v0: b1):
return v1
}
; check: sllk %r2, %r2, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BREDUCE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r5, %r2, 31
; srak %r2, %r5, 31
; br %r14
function %breduce_b64_b32(b64, b64) -> b32 {
block0(v0: b64, v1: b64):
@@ -285,8 +295,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b64_b16(b64, b64) -> b16 {
block0(v0: b64, v1: b64):
@@ -294,8 +305,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b64_b8(b64, b64) -> b8 {
block0(v0: b64, v1: b64):
@@ -303,8 +315,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b64_b1(b64, b64) -> b1 {
block0(v0: b64, v1: b64):
@@ -312,8 +325,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b32_b16(b32, b32) -> b16 {
block0(v0: b32, v1: b32):
@@ -321,8 +335,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b32_b8(b32, b32) -> b8 {
block0(v0: b32, v1: b32):
@@ -330,8 +345,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b32_b1(b32, b32) -> b1 {
block0(v0: b32, v1: b32):
@@ -339,8 +355,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b16_b8(b16, b16) -> b8 {
block0(v0: b16, v1: b16):
@@ -348,8 +365,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b16_b1(b16, b16) -> b1 {
block0(v0: b16, v1: b16):
@@ -357,8 +375,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %breduce_b8_b1(b8, b8) -> b1 {
block0(v0: b8, v1: b8):
@@ -366,12 +385,9 @@ block0(v0: b8, v1: b8):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BMASK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b64_i64(b64, b64) -> i64 {
block0(v0: b64, v1: b64):
@@ -379,8 +395,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lgr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b64_i32(b64, b64) -> i32 {
block0(v0: b64, v1: b64):
@@ -388,8 +405,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b64_i16(b64, b64) -> i16 {
block0(v0: b64, v1: b64):
@@ -397,8 +415,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b64_i8(b64, b64) -> i8 {
block0(v0: b64, v1: b64):
@@ -406,8 +425,9 @@ block0(v0: b64, v1: b64):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b32_i64(b32, b32) -> i64 {
block0(v0: b32, v1: b32):
@@ -415,8 +435,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lgfr %r2, %r3
; nextln: br %r14
; block0:
; lgfr %r2, %r3
; br %r14
function %bmask_b32_i32(b32, b32) -> i32 {
block0(v0: b32, v1: b32):
@@ -424,8 +445,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b32_i16(b32, b32) -> i16 {
block0(v0: b32, v1: b32):
@@ -433,8 +455,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b32_i8(b32, b32) -> i8 {
block0(v0: b32, v1: b32):
@@ -442,8 +465,9 @@ block0(v0: b32, v1: b32):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b16_i64(b16, b16) -> i64 {
block0(v0: b16, v1: b16):
@@ -451,8 +475,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lghr %r2, %r3
; nextln: br %r14
; block0:
; lghr %r2, %r3
; br %r14
function %bmask_b16_i32(b16, b16) -> i32 {
block0(v0: b16, v1: b16):
@@ -460,8 +485,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lhr %r2, %r3
; nextln: br %r14
; block0:
; lhr %r2, %r3
; br %r14
function %bmask_b16_i16(b16, b16) -> i16 {
block0(v0: b16, v1: b16):
@@ -469,8 +495,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b16_i8(b16, b16) -> i8 {
block0(v0: b16, v1: b16):
@@ -478,8 +505,9 @@ block0(v0: b16, v1: b16):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b8_i64(b8, b8) -> i64 {
block0(v0: b8, v1: b8):
@@ -487,8 +515,9 @@ block0(v0: b8, v1: b8):
return v2
}
; check: lgbr %r2, %r3
; nextln: br %r14
; block0:
; lgbr %r2, %r3
; br %r14
function %bmask_b8_i32(b8, b8) -> i32 {
block0(v0: b8, v1: b8):
@@ -496,8 +525,9 @@ block0(v0: b8, v1: b8):
return v2
}
; check: lbr %r2, %r3
; nextln: br %r14
; block0:
; lbr %r2, %r3
; br %r14
function %bmask_b8_i16(b8, b8) -> i16 {
block0(v0: b8, v1: b8):
@@ -505,8 +535,9 @@ block0(v0: b8, v1: b8):
return v2
}
; check: lbr %r2, %r3
; nextln: br %r14
; block0:
; lbr %r2, %r3
; br %r14
function %bmask_b8_i8(b8, b8) -> i8 {
block0(v0: b8, v1: b8):
@@ -514,8 +545,9 @@ block0(v0: b8, v1: b8):
return v2
}
; check: lr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %bmask_b1_i64(b1, b1) -> i64 {
block0(v0: b1, v1: b1):
@@ -523,9 +555,10 @@ block0(v0: b1, v1: b1):
return v2
}
; check: sllg %r2, %r3, 63
; nextln: srag %r2, %r2, 63
; nextln: br %r14
; block0:
; sllg %r3, %r3, 63
; srag %r2, %r3, 63
; br %r14
function %bmask_b1_i32(b1, b1) -> i32 {
block0(v0: b1, v1: b1):
@@ -533,9 +566,10 @@ block0(v0: b1, v1: b1):
return v2
}
; check: sllk %r2, %r3, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
; block0:
; sllk %r3, %r3, 31
; srak %r2, %r3, 31
; br %r14
function %bmask_b1_i16(b1, b1) -> i16 {
block0(v0: b1, v1: b1):
@@ -543,9 +577,10 @@ block0(v0: b1, v1: b1):
return v2
}
; check: sllk %r2, %r3, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
; block0:
; sllk %r3, %r3, 31
; srak %r2, %r3, 31
; br %r14
function %bmask_b1_i8(b1, b1) -> i8 {
block0(v0: b1, v1: b1):
@@ -553,13 +588,10 @@ block0(v0: b1, v1: b1):
return v2
}
; check: sllk %r2, %r3, 31
; nextln: srak %r2, %r2, 31
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BINT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r3, %r3, 31
; srak %r2, %r3, 31
; br %r14
function %bint_b64_i64(b64) -> i64 {
block0(v0: b64):
@@ -567,9 +599,10 @@ block0(v0: b64):
return v1
}
; check: lghi %r3, 1
; nextln: ngr %r2, %r3
; nextln: br %r14
; block0:
; lghi %r5, 1
; ngr %r2, %r5
; br %r14
function %bint_b64_i32(b64) -> i32 {
block0(v0: b64):
@@ -577,8 +610,9 @@ block0(v0: b64):
return v1
}
; check: nilf %r2, 1
; nextln: br %r14
; block0:
; nilf %r2, 1
; br %r14
function %bint_b64_i16(b64) -> i16 {
block0(v0: b64):
@@ -586,8 +620,9 @@ block0(v0: b64):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b64_i8(b64) -> i8 {
block0(v0: b64):
@@ -595,8 +630,9 @@ block0(v0: b64):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b32_i64(b32) -> i64 {
block0(v0: b32):
@@ -604,9 +640,10 @@ block0(v0: b32):
return v1
}
; check: lghi %r3, 1
; nextln: ngr %r2, %r3
; nextln: br %r14
; block0:
; lghi %r5, 1
; ngr %r2, %r5
; br %r14
function %bint_b32_i32(b32) -> i32 {
block0(v0: b32):
@@ -614,8 +651,9 @@ block0(v0: b32):
return v1
}
; check: nilf %r2, 1
; nextln: br %r14
; block0:
; nilf %r2, 1
; br %r14
function %bint_b32_i16(b32) -> i16 {
block0(v0: b32):
@@ -623,8 +661,9 @@ block0(v0: b32):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b32_i8(b32) -> i8 {
block0(v0: b32):
@@ -632,8 +671,9 @@ block0(v0: b32):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b16_i64(b16) -> i64 {
block0(v0: b16):
@@ -641,9 +681,10 @@ block0(v0: b16):
return v1
}
; check: lghi %r3, 1
; nextln: ngr %r2, %r3
; nextln: br %r14
; block0:
; lghi %r5, 1
; ngr %r2, %r5
; br %r14
function %bint_b16_i32(b16) -> i32 {
block0(v0: b16):
@@ -651,8 +692,9 @@ block0(v0: b16):
return v1
}
; check: nilf %r2, 1
; nextln: br %r14
; block0:
; nilf %r2, 1
; br %r14
function %bint_b16_i16(b16) -> i16 {
block0(v0: b16):
@@ -660,8 +702,9 @@ block0(v0: b16):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b16_i8(b16) -> i8 {
block0(v0: b16):
@@ -669,8 +712,9 @@ block0(v0: b16):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b8_i64(b8) -> i64 {
block0(v0: b8):
@@ -678,9 +722,10 @@ block0(v0: b8):
return v1
}
; check: lghi %r3, 1
; nextln: ngr %r2, %r3
; nextln: br %r14
; block0:
; lghi %r5, 1
; ngr %r2, %r5
; br %r14
function %bint_b8_i32(b8) -> i32 {
block0(v0: b8):
@@ -688,8 +733,9 @@ block0(v0: b8):
return v1
}
; check: nilf %r2, 1
; nextln: br %r14
; block0:
; nilf %r2, 1
; br %r14
function %bint_b8_i16(b8) -> i16 {
block0(v0: b8):
@@ -697,8 +743,9 @@ block0(v0: b8):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b8_i8(b8) -> i8 {
block0(v0: b8):
@@ -706,8 +753,9 @@ block0(v0: b8):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b1_i64(b1) -> i64 {
block0(v0: b1):
@@ -715,9 +763,10 @@ block0(v0: b1):
return v1
}
; check: lghi %r3, 1
; nextln: ngr %r2, %r3
; nextln: br %r14
; block0:
; lghi %r5, 1
; ngr %r2, %r5
; br %r14
function %bint_b1_i32(b1) -> i32 {
block0(v0: b1):
@@ -725,8 +774,9 @@ block0(v0: b1):
return v1
}
; check: nilf %r2, 1
; nextln: br %r14
; block0:
; nilf %r2, 1
; br %r14
function %bint_b1_i16(b1) -> i16 {
block0(v0: b1):
@@ -734,8 +784,9 @@ block0(v0: b1):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14
function %bint_b1_i8(b1) -> i8 {
block0(v0: b1):
@@ -743,6 +794,7 @@ block0(v0: b1):
return v1
}
; check: nill %r2, 1
; nextln: br %r14
; block0:
; nill %r2, 1
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set avoid_div_traps=1
target s390x
@@ -12,16 +12,17 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: llihf %r2, 2147483647
; nextln: iilf %r2, 4294967295
; nextln: xgr %r2, %r1
; nextln: ngr %r2, %r3
; nextln: cgite %r2, -1
; nextln: dsgr %r0, %r3
; nextln: lgr %r2, %r1
; nextln: br %r14
; block0:
; lgr %r1, %r2
; cgite %r3, 0
; llihf %r5, 2147483647
; iilf %r5, 4294967295
; xgrk %r4, %r5, %r1
; ngrk %r2, %r4, %r3
; cgite %r2, -1
; dsgr %r0, %r3
; lgr %r2, %r1
; br %r14
function %sdiv_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -30,11 +31,12 @@ block0(v0: i64):
return v2
}
; check: lgr %r1, %r2
; nextln: lghi %r2, 2
; nextln: dsgr %r0, %r2
; nextln: lgr %r2, %r1
; nextln: br %r14
; block0:
; lgr %r1, %r2
; lghi %r2, 2
; dsgr %r0, %r2
; lgr %r2, %r1
; br %r14
function %sdiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -42,15 +44,16 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lgfr %r1, %r2
; nextln: cite %r3, 0
; nextln: iilf %r2, 2147483647
; nextln: xr %r2, %r1
; nextln: nr %r2, %r3
; nextln: cite %r2, -1
; nextln: dsgfr %r0, %r3
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lgfr %r1, %r2
; cite %r3, 0
; iilf %r5, 2147483647
; xrk %r4, %r5, %r1
; nrk %r5, %r4, %r3
; cite %r5, -1
; dsgfr %r0, %r3
; lgr %r2, %r1
; br %r14
function %sdiv_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -59,11 +62,12 @@ block0(v0: i32):
return v2
}
; check: lgfr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lgfr %r1, %r2
; lhi %r2, 2
; dsgfr %r0, %r2
; lgr %r2, %r1
; br %r14
function %sdiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -71,16 +75,17 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lghr %r1, %r2
; nextln: lhr %r2, %r3
; nextln: cite %r2, 0
; nextln: lhi %r3, 32767
; nextln: xr %r3, %r1
; nextln: nr %r3, %r2
; nextln: cite %r3, -1
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lghr %r1, %r2
; lhr %r4, %r3
; cite %r4, 0
; lhi %r3, 32767
; xrk %r5, %r3, %r1
; nrk %r3, %r5, %r4
; cite %r3, -1
; dsgfr %r0, %r4
; lgr %r2, %r1
; br %r14
function %sdiv_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -89,11 +94,12 @@ block0(v0: i16):
return v2
}
; check: lghr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lghr %r1, %r2
; lhi %r2, 2
; dsgfr %r0, %r2
; lgr %r2, %r1
; br %r14
function %sdiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -101,16 +107,17 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lgbr %r1, %r2
; nextln: lbr %r2, %r3
; nextln: cite %r2, 0
; nextln: lhi %r3, 127
; nextln: xr %r3, %r1
; nextln: nr %r3, %r2
; nextln: cite %r3, -1
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lgbr %r1, %r2
; lbr %r4, %r3
; cite %r4, 0
; lhi %r3, 127
; xrk %r5, %r3, %r1
; nrk %r3, %r5, %r4
; cite %r3, -1
; dsgfr %r0, %r4
; lgr %r2, %r1
; br %r14
function %sdiv_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -119,15 +126,12 @@ block0(v0: i8):
return v2
}
; check: lgbr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; UDIV
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lgbr %r1, %r2
; lhi %r2, 2
; dsgfr %r0, %r2
; lgr %r2, %r1
; br %r14
function %udiv_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -135,12 +139,13 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: dlgr %r0, %r3
; nextln: lgr %r2, %r1
; nextln: br %r14
; block0:
; lghi %r0, 0
; lgr %r1, %r2
; cgite %r3, 0
; dlgr %r0, %r3
; lgr %r2, %r1
; br %r14
function %udiv_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -149,12 +154,13 @@ block0(v0: i64):
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: lghi %r2, 2
; nextln: dlgr %r0, %r2
; nextln: lgr %r2, %r1
; nextln: br %r14
; block0:
; lghi %r0, 0
; lgr %r1, %r2
; lghi %r3, 2
; dlgr %r0, %r3
; lgr %r2, %r1
; br %r14
function %udiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -162,12 +168,13 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: cite %r3, 0
; nextln: dlr %r0, %r3
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lhi %r0, 0
; lgr %r1, %r2
; cite %r3, 0
; dlr %r0, %r3
; lgr %r2, %r1
; br %r14
function %udiv_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -176,12 +183,13 @@ block0(v0: i32):
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lhi %r0, 0
; lgr %r1, %r2
; lhi %r3, 2
; dlr %r0, %r3
; lgr %r2, %r1
; br %r14
function %udiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -189,13 +197,14 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: llhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lhi %r0, 0
; llhr %r1, %r2
; llhr %r5, %r3
; cite %r5, 0
; dlr %r0, %r5
; lgr %r2, %r1
; br %r14
function %udiv_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -204,12 +213,13 @@ block0(v0: i16):
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lhi %r0, 0
; llhr %r1, %r2
; lhi %r3, 2
; dlr %r0, %r3
; lgr %r2, %r1
; br %r14
function %udiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -217,13 +227,14 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: llcr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
; block0:
; lhi %r0, 0
; llcr %r1, %r2
; llcr %r5, %r3
; cite %r5, 0
; dlr %r0, %r5
; lgr %r2, %r1
; br %r14
function %udiv_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -232,16 +243,13 @@ block0(v0: i8):
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SREM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lhi %r0, 0
; llcr %r1, %r2
; lhi %r3, 2
; dlr %r0, %r3
; lgr %r2, %r1
; br %r14
function %srem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -249,13 +257,14 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: cghi %r3, -1
; nextln: locghie %r1, 0
; nextln: dsgr %r0, %r3
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lgr %r1, %r2
; cgite %r3, 0
; cghi %r3, -1
; locghie %r1, 0
; dsgr %r0, %r3
; lgr %r2, %r0
; br %r14
function %srem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -263,11 +272,12 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lgfr %r1, %r2
; nextln: cite %r3, 0
; nextln: dsgfr %r0, %r3
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; lgfr %r1, %r2
; cite %r3, 0
; dsgfr %r0, %r3
; lgr %r2, %r0
; br %r14
function %srem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -275,12 +285,13 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lghr %r1, %r2
; nextln: lhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; lghr %r1, %r2
; lhr %r4, %r3
; cite %r4, 0
; dsgfr %r0, %r4
; lgr %r2, %r0
; br %r14
function %srem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -288,16 +299,13 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lgbr %r1, %r2
; nextln: lbr %r2, %r3
; nextln: cite %r2, 0
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; UREM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lgbr %r1, %r2
; lbr %r4, %r3
; cite %r4, 0
; dsgfr %r0, %r4
; lgr %r2, %r0
; br %r14
function %urem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -305,12 +313,13 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: dlgr %r0, %r3
; nextln: lgr %r2, %r0
; nextln: br %r14
; block0:
; lghi %r0, 0
; lgr %r1, %r2
; cgite %r3, 0
; dlgr %r0, %r3
; lgr %r2, %r0
; br %r14
function %urem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -318,12 +327,13 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: cite %r3, 0
; nextln: dlr %r0, %r3
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; lhi %r0, 0
; lgr %r1, %r2
; cite %r3, 0
; dlr %r0, %r3
; lgr %r2, %r0
; br %r14
function %urem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -331,13 +341,14 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: llhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; lhi %r0, 0
; llhr %r1, %r2
; llhr %r5, %r3
; cite %r5, 0
; dlr %r0, %r5
; lgr %r2, %r0
; br %r14
function %urem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -345,11 +356,12 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: llcr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
; block0:
; lhi %r0, 0
; llcr %r1, %r2
; llcr %r5, %r3
; cite %r5, 0
; dlr %r0, %r5
; lgr %r2, %r0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,7 +11,7 @@ block0:
return
}
; check: bcr 14, 0
; nextln: br %r14
; block0:
; bcr 14, 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -14,8 +14,9 @@ block0:
return v1
}
; check: bras %r1, 8 ; data.f32 0 ; le %f0, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 8 ; data.f32 0 ; le %f0, 0(%r1)
; br %r14
function %f64const_zero() -> f64 {
block0:
@@ -23,8 +24,9 @@ block0:
return v1
}
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; br %r14
function %f32const_one() -> f32 {
block0:
@@ -32,8 +34,9 @@ block0:
return v1
}
; check: bras %r1, 8 ; data.f32 1 ; le %f0, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 8 ; data.f32 1 ; le %f0, 0(%r1)
; br %r14
function %f64const_one() -> f64 {
block0:
@@ -41,12 +44,9 @@ block0:
return v1
}
; check: bras %r1, 12 ; data.f64 1 ; ld %f0, 0(%r1)
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FADD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; bras %r1, 12 ; data.f64 1 ; ld %f0, 0(%r1)
; br %r14
function %fadd_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -54,8 +54,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: aebr %f0, %f2
; nextln: br %r14
; block0:
; aebr %f0, %f2
; br %r14
function %fadd_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -63,12 +64,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: adbr %f0, %f2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FSUB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; adbr %f0, %f2
; br %r14
function %fsub_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -76,8 +74,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: sebr %f0, %f2
; nextln: br %r14
; block0:
; sebr %f0, %f2
; br %r14
function %fsub_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -85,12 +84,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: sdbr %f0, %f2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FMUL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sdbr %f0, %f2
; br %r14
function %fmul_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -98,8 +94,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: meebr %f0, %f2
; nextln: br %r14
; block0:
; meebr %f0, %f2
; br %r14
function %fmul_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -107,12 +104,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: mdbr %f0, %f2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FDIV
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; mdbr %f0, %f2
; br %r14
function %fdiv_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -120,8 +114,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: debr %f0, %f2
; nextln: br %r14
; block0:
; debr %f0, %f2
; br %r14
function %fdiv_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -129,12 +124,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: ddbr %f0, %f2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FMIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; ddbr %f0, %f2
; br %r14
function %fmin_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -142,8 +134,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: wfminsb %f0, %f0, %f2, 1
; nextln: br %r14
; block0:
; wfminsb %f0, %f0, %f2, 1
; br %r14
function %fmin_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -151,12 +144,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: wfmindb %f0, %f0, %f2, 1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FMAX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; wfmindb %f0, %f0, %f2, 1
; br %r14
function %fmax_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -164,8 +154,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: wfmaxsb %f0, %f0, %f2, 1
; nextln: br %r14
; block0:
; wfmaxsb %f0, %f0, %f2, 1
; br %r14
function %fmax_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -173,12 +164,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: wfmaxdb %f0, %f0, %f2, 1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SQRT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; wfmaxdb %f0, %f0, %f2, 1
; br %r14
function %sqrt_f32(f32) -> f32 {
block0(v0: f32):
@@ -186,8 +174,9 @@ block0(v0: f32):
return v1
}
; check: sqebr %f0, %f0
; nextln: br %r14
; block0:
; sqebr %f0, %f0
; br %r14
function %sqrt_f64(f64) -> f64 {
block0(v0: f64):
@@ -195,12 +184,9 @@ block0(v0: f64):
return v1
}
; check: sqdbr %f0, %f0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FABS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sqdbr %f0, %f0
; br %r14
function %fabs_f32(f32) -> f32 {
block0(v0: f32):
@@ -208,8 +194,9 @@ block0(v0: f32):
return v1
}
; check: lpebr %f0, %f0
; nextln: br %r14
; block0:
; lpebr %f0, %f0
; br %r14
function %fabs_f64(f64) -> f64 {
block0(v0: f64):
@@ -217,12 +204,9 @@ block0(v0: f64):
return v1
}
; check: lpdbr %f0, %f0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FNEG
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lpdbr %f0, %f0
; br %r14
function %fneg_f32(f32) -> f32 {
block0(v0: f32):
@@ -230,8 +214,9 @@ block0(v0: f32):
return v1
}
; check: lcebr %f0, %f0
; nextln: br %r14
; block0:
; lcebr %f0, %f0
; br %r14
function %fneg_f64(f64) -> f64 {
block0(v0: f64):
@@ -239,12 +224,9 @@ block0(v0: f64):
return v1
}
; check: lcdbr %f0, %f0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FPROMOTE/FDEMOTE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; lcdbr %f0, %f0
; br %r14
function %fpromote_f32(f32) -> f64 {
block0(v0: f32):
@@ -252,8 +234,9 @@ block0(v0: f32):
return v1
}
; check: ldebr %f0, %f0
; nextln: br %r14
; block0:
; ldebr %f0, %f0
; br %r14
function %fdemote_f64(f64) -> f32 {
block0(v0: f64):
@@ -261,12 +244,9 @@ block0(v0: f64):
return v1
}
; check: ledbr %f0, %f0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CEIL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; ledbr %f0, %f0
; br %r14
function %ceil_f32(f32) -> f32 {
block0(v0: f32):
@@ -274,8 +254,9 @@ block0(v0: f32):
return v1
}
; check: fiebr %f0, %f0, 6
; nextln: br %r14
; block0:
; fiebr %f0, %f0, 6
; br %r14
function %ceil_f64(f64) -> f64 {
block0(v0: f64):
@@ -283,12 +264,9 @@ block0(v0: f64):
return v1
}
; check: fidbr %f0, %f0, 6
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FLOOR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; fidbr %f0, %f0, 6
; br %r14
function %floor_f32(f32) -> f32 {
block0(v0: f32):
@@ -296,8 +274,9 @@ block0(v0: f32):
return v1
}
; check: fiebr %f0, %f0, 7
; nextln: br %r14
; block0:
; fiebr %f0, %f0, 7
; br %r14
function %floor_f64(f64) -> f64 {
block0(v0: f64):
@@ -305,12 +284,9 @@ block0(v0: f64):
return v1
}
; check: fidbr %f0, %f0, 7
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TRUNC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; fidbr %f0, %f0, 7
; br %r14
function %trunc_f32(f32) -> f32 {
block0(v0: f32):
@@ -318,8 +294,9 @@ block0(v0: f32):
return v1
}
; check: fiebr %f0, %f0, 5
; nextln: br %r14
; block0:
; fiebr %f0, %f0, 5
; br %r14
function %trunc_f64(f64) -> f64 {
block0(v0: f64):
@@ -327,12 +304,9 @@ block0(v0: f64):
return v1
}
; check: fidbr %f0, %f0, 5
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NEAREST
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; fidbr %f0, %f0, 5
; br %r14
function %nearest_f32(f32) -> f32 {
block0(v0: f32):
@@ -340,8 +314,9 @@ block0(v0: f32):
return v1
}
; check: fiebr %f0, %f0, 4
; nextln: br %r14
; block0:
; fiebr %f0, %f0, 4
; br %r14
function %nearest_f64(f64) -> f64 {
block0(v0: f64):
@@ -349,12 +324,9 @@ block0(v0: f64):
return v1
}
; check: fidbr %f0, %f0, 4
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; fidbr %f0, %f0, 4
; br %r14
function %fma_f32(f32, f32, f32) -> f32 {
block0(v0: f32, v1: f32, v2: f32):
@@ -362,11 +334,11 @@ block0(v0: f32, v1: f32, v2: f32):
return v3
}
; FIXME: regalloc
; check: maebr %f4, %f0, %f2
; nextln: ler %f0, %f4
; nextln: br %r14
; block0:
; ldr %f1, %f0
; ldr %f0, %f4
; maebr %f0, %f1, %f2
; br %r14
function %fma_f64(f64, f64, f64) -> f64 {
block0(v0: f64, v1: f64, v2: f64):
@@ -374,13 +346,11 @@ block0(v0: f64, v1: f64, v2: f64):
return v3
}
; check: madbr %f4, %f0, %f2
; nextln: ldr %f0, %f4
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FCOPYSIGN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; ldr %f1, %f0
; ldr %f0, %f4
; madbr %f0, %f1, %f2
; br %r14
function %fcopysign_f32(f32, f32) -> f32 {
block0(v0: f32, v1: f32):
@@ -388,8 +358,9 @@ block0(v0: f32, v1: f32):
return v2
}
; check: cpsdr %f0, %f2, %f0
; nextln: br %r14
; block0:
; cpsdr %f0, %f2, %f0
; br %r14
function %fcopysign_f64(f64, f64) -> f64 {
block0(v0: f64, v1: f64):
@@ -397,12 +368,9 @@ block0(v0: f64, v1: f64):
return v2
}
; check: cpsdr %f0, %f2, %f0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FCVT_TO_UINT/FCVT_TO_SINT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; cpsdr %f0, %f2, %f0
; br %r14
function %fcvt_to_uint_f32_i32(f32) -> i32 {
block0(v0: f32):
@@ -410,11 +378,12 @@ block0(v0: f32):
return v1
}
; check: cebr %f0, %f0
; nextln: jno 6 ; trap
; nextln: clfebr %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cebr %f0, %f0
; jno 6 ; trap
; clfebr %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_sint_f32_i32(f32) -> i32 {
block0(v0: f32):
@@ -422,11 +391,12 @@ block0(v0: f32):
return v1
}
; check: cebr %f0, %f0
; nextln: jno 6 ; trap
; nextln: cfebra %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cebr %f0, %f0
; jno 6 ; trap
; cfebra %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_uint_f32_i64(f32) -> i64 {
block0(v0: f32):
@@ -434,11 +404,12 @@ block0(v0: f32):
return v1
}
; check: cebr %f0, %f0
; nextln: jno 6 ; trap
; nextln: clgebr %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cebr %f0, %f0
; jno 6 ; trap
; clgebr %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_sint_f32_i64(f32) -> i64 {
block0(v0: f32):
@@ -446,11 +417,12 @@ block0(v0: f32):
return v1
}
; check: cebr %f0, %f0
; nextln: jno 6 ; trap
; nextln: cgebra %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cebr %f0, %f0
; jno 6 ; trap
; cgebra %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_uint_f64_i32(f64) -> i32 {
block0(v0: f64):
@@ -458,11 +430,12 @@ block0(v0: f64):
return v1
}
; check: cdbr %f0, %f0
; nextln: jno 6 ; trap
; nextln: clfdbr %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cdbr %f0, %f0
; jno 6 ; trap
; clfdbr %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_sint_f64_i32(f64) -> i32 {
block0(v0: f64):
@@ -470,11 +443,12 @@ block0(v0: f64):
return v1
}
; check: cdbr %f0, %f0
; nextln: jno 6 ; trap
; nextln: cfdbra %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cdbr %f0, %f0
; jno 6 ; trap
; cfdbra %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_uint_f64_i64(f64) -> i64 {
block0(v0: f64):
@@ -482,11 +456,12 @@ block0(v0: f64):
return v1
}
; check: cdbr %f0, %f0
; nextln: jno 6 ; trap
; nextln: clgdbr %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
; block0:
; cdbr %f0, %f0
; jno 6 ; trap
; clgdbr %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_to_sint_f64_i64(f64) -> i64 {
block0(v0: f64):
@@ -494,15 +469,12 @@ block0(v0: f64):
return v1
}
; check: cdbr %f0, %f0
; nextln: jno 6 ; trap
; nextln: cgdbra %r2, 5, %f0, 0
; nextln: jno 6 ; trap
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FCVT_FROM_UINT/FCVT_FROM_SINT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; cdbr %f0, %f0
; jno 6 ; trap
; cgdbra %r2, 5, %f0, 0
; jno 6 ; trap
; br %r14
function %fcvt_from_uint_i32_f32(i32) -> f32 {
block0(v0: i32):
@@ -510,8 +482,9 @@ block0(v0: i32):
return v1
}
; check: celfbr %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; celfbr %f0, 0, %r2, 0
; br %r14
function %fcvt_from_sint_i32_f32(i32) -> f32 {
block0(v0: i32):
@@ -519,8 +492,9 @@ block0(v0: i32):
return v1
}
; check: cefbra %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; cefbra %f0, 0, %r2, 0
; br %r14
function %fcvt_from_uint_i64_f32(i64) -> f32 {
block0(v0: i64):
@@ -528,8 +502,9 @@ block0(v0: i64):
return v1
}
; check: celgbr %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; celgbr %f0, 0, %r2, 0
; br %r14
function %fcvt_from_sint_i64_f32(i64) -> f32 {
block0(v0: i64):
@@ -537,8 +512,9 @@ block0(v0: i64):
return v1
}
; check: cegbra %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; cegbra %f0, 0, %r2, 0
; br %r14
function %fcvt_from_uint_i32_f64(i32) -> f64 {
block0(v0: i32):
@@ -546,8 +522,9 @@ block0(v0: i32):
return v1
}
; check: cdlfbr %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; cdlfbr %f0, 0, %r2, 0
; br %r14
function %fcvt_from_sint_i32_f64(i32) -> f64 {
block0(v0: i32):
@@ -555,8 +532,9 @@ block0(v0: i32):
return v1
}
; check: cdfbra %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; cdfbra %f0, 0, %r2, 0
; br %r14
function %fcvt_from_uint_i64_f64(i64) -> f64 {
block0(v0: i64):
@@ -564,8 +542,9 @@ block0(v0: i64):
return v1
}
; check: cdlgbr %f0, 0, %r2, 0
; nextln: br %r14
; block0:
; cdlgbr %f0, 0, %r2, 0
; br %r14
function %fcvt_from_sint_i64_f64(i64) -> f64 {
block0(v0: i64):
@@ -573,12 +552,9 @@ block0(v0: i64):
return v1
}
; check: cdgbra %f0, 0, %r2, 0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FCVT_TO_UINT_SAT/FCVT_TO_SINT_SAT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; cdgbra %f0, 0, %r2, 0
; br %r14
function %fcvt_to_uint_sat_f32_i32(f32) -> i32 {
block0(v0: f32):
@@ -586,10 +562,11 @@ block0(v0: f32):
return v1
}
; check: clfebr %r2, 5, %f0, 0
; nextln: cebr %f0, %f0
; nextln: lochio %r2, 0
; nextln: br %r14
; block0:
; clfebr %r2, 5, %f0, 0
; cebr %f0, %f0
; lochio %r2, 0
; br %r14
function %fcvt_to_sint_sat_f32_i32(f32) -> i32 {
block0(v0: f32):
@@ -597,10 +574,11 @@ block0(v0: f32):
return v1
}
; check: cfebra %r2, 5, %f0, 0
; nextln: cebr %f0, %f0
; nextln: lochio %r2, 0
; nextln: br %r14
; block0:
; cfebra %r2, 5, %f0, 0
; cebr %f0, %f0
; lochio %r2, 0
; br %r14
function %fcvt_to_uint_sat_f32_i64(f32) -> i64 {
block0(v0: f32):
@@ -608,10 +586,11 @@ block0(v0: f32):
return v1
}
; check: clgebr %r2, 5, %f0, 0
; nextln: cebr %f0, %f0
; nextln: locghio %r2, 0
; nextln: br %r14
; block0:
; clgebr %r2, 5, %f0, 0
; cebr %f0, %f0
; locghio %r2, 0
; br %r14
function %fcvt_to_sint_sat_f32_i64(f32) -> i64 {
block0(v0: f32):
@@ -619,10 +598,11 @@ block0(v0: f32):
return v1
}
; check: cgebra %r2, 5, %f0, 0
; nextln: cebr %f0, %f0
; nextln: locghio %r2, 0
; nextln: br %r14
; block0:
; cgebra %r2, 5, %f0, 0
; cebr %f0, %f0
; locghio %r2, 0
; br %r14
function %fcvt_to_uint_sat_f64_i32(f64) -> i32 {
block0(v0: f64):
@@ -630,10 +610,11 @@ block0(v0: f64):
return v1
}
; check: clfdbr %r2, 5, %f0, 0
; nextln: cdbr %f0, %f0
; nextln: lochio %r2, 0
; nextln: br %r14
; block0:
; clfdbr %r2, 5, %f0, 0
; cdbr %f0, %f0
; lochio %r2, 0
; br %r14
function %fcvt_to_sint_sat_f64_i32(f64) -> i32 {
block0(v0: f64):
@@ -641,10 +622,11 @@ block0(v0: f64):
return v1
}
; check: cfdbra %r2, 5, %f0, 0
; nextln: cdbr %f0, %f0
; nextln: lochio %r2, 0
; nextln: br %r14
; block0:
; cfdbra %r2, 5, %f0, 0
; cdbr %f0, %f0
; lochio %r2, 0
; br %r14
function %fcvt_to_uint_sat_f64_i64(f64) -> i64 {
block0(v0: f64):
@@ -652,10 +634,11 @@ block0(v0: f64):
return v1
}
; check: clgdbr %r2, 5, %f0, 0
; nextln: cdbr %f0, %f0
; nextln: locghio %r2, 0
; nextln: br %r14
; block0:
; clgdbr %r2, 5, %f0, 0
; cdbr %f0, %f0
; locghio %r2, 0
; br %r14
function %fcvt_to_sint_sat_f64_i64(f64) -> i64 {
block0(v0: f64):
@@ -663,14 +646,11 @@ block0(v0: f64):
return v1
}
; check: cgdbra %r2, 5, %f0, 0
; nextln: cdbr %f0, %f0
; nextln: locghio %r2, 0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BITCAST
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; cgdbra %r2, 5, %f0, 0
; cdbr %f0, %f0
; locghio %r2, 0
; br %r14
function %bitcast_i64_f64(i64) -> f64 {
block0(v0: i64):
@@ -678,8 +658,9 @@ block0(v0: i64):
return v1
}
; check: ldgr %f0, %r2
; nextln: br %r14
; block0:
; ldgr %f0, %r2
; br %r14
function %bitcast_f64_i64(f64) -> i64 {
block0(v0: f64):
@@ -687,8 +668,9 @@ block0(v0: f64):
return v1
}
; check: lgdr %r2, %f0
; nextln: br %r14
; block0:
; lgdr %r2, %f0
; br %r14
function %bitcast_i32_f32(i32) -> f32 {
block0(v0: i32):
@@ -696,9 +678,10 @@ block0(v0: i32):
return v1
}
; check: sllg %r2, %r2, 32
; nextln: ldgr %f0, %r2
; nextln: br %r14
; block0:
; sllg %r5, %r2, 32
; ldgr %f0, %r5
; br %r14
function %bitcast_f32_i32(f32) -> i32 {
block0(v0: f32):
@@ -706,6 +689,8 @@ block0(v0: f32):
return v1
}
; check: lgdr %r2, %f0
; nextln: srlg %r2, %r2, 32
; nextln: br %r14
; block0:
; lgdr %r5, %f0
; srlg %r2, %r5, 32
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x arch13
function %load_f64_little(i64) -> f64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: vlebrg %f0, 0(%r2), 0
; nextln: br %r14
; block0:
; vlebrg %f0, 0(%r2), 0
; br %r14
function %load_f32_little(i64) -> f32 {
block0(v0: i64):
@@ -16,8 +17,9 @@ block0(v0: i64):
return v1
}
; check: vlebrf %f0, 0(%r2), 0
; nextln: br %r14
; block0:
; vlebrf %f0, 0(%r2), 0
; br %r14
function %store_f64_little(f64, i64) {
block0(v0: f64, v1: i64):
@@ -25,8 +27,9 @@ block0(v0: f64, v1: i64):
return
}
; check: vstebrg %f0, 0(%r2), 0
; nextln: br %r14
; block0:
; vstebrg %f0, 0(%r2), 0
; br %r14
function %store_f32_little(f32, i64) {
block0(v0: f32, v1: i64):
@@ -34,6 +37,7 @@ block0(v0: f32, v1: i64):
return
}
; check: vstebrf %f0, 0(%r2), 0
; nextln: br %r14
; block0:
; vstebrf %f0, 0(%r2), 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %load_f64(i64) -> f64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: ld %f0, 0(%r2)
; nextln: br %r14
; block0:
; ld %f0, 0(%r2)
; br %r14
function %load_f32(i64) -> f32 {
block0(v0: i64):
@@ -16,8 +17,9 @@ block0(v0: i64):
return v1
}
; check: le %f0, 0(%r2)
; nextln: br %r14
; block0:
; le %f0, 0(%r2)
; br %r14
function %load_f64_little(i64) -> f64 {
block0(v0: i64):
@@ -25,9 +27,10 @@ block0(v0: i64):
return v1
}
; check: lrvg %r2, 0(%r2)
; nextln: ldgr %f0, %r2
; nextln: br %r14
; block0:
; lrvg %r5, 0(%r2)
; ldgr %f0, %r5
; br %r14
function %load_f32_little(i64) -> f32 {
block0(v0: i64):
@@ -35,10 +38,11 @@ block0(v0: i64):
return v1
}
; check: lrv %r2, 0(%r2)
; nextln: sllg %r2, %r2, 32
; nextln: ldgr %f0, %r2
; nextln: br %r14
; block0:
; lrv %r5, 0(%r2)
; sllg %r3, %r5, 32
; ldgr %f0, %r3
; br %r14
function %store_f64(f64, i64) {
block0(v0: f64, v1: i64):
@@ -46,8 +50,9 @@ block0(v0: f64, v1: i64):
return
}
; check: std %f0, 0(%r2)
; nextln: br %r14
; block0:
; std %f0, 0(%r2)
; br %r14
function %store_f32(f32, i64) {
block0(v0: f32, v1: i64):
@@ -55,8 +60,9 @@ block0(v0: f32, v1: i64):
return
}
; check: ste %f0, 0(%r2)
; nextln: br %r14
; block0:
; ste %f0, 0(%r2)
; br %r14
function %store_f64_little(f64, i64) {
block0(v0: f64, v1: i64):
@@ -64,9 +70,10 @@ block0(v0: f64, v1: i64):
return
}
; check: lgdr %r3, %f0
; nextln: strvg %r3, 0(%r2)
; nextln: br %r14
; block0:
; lgdr %r3, %f0
; strvg %r3, 0(%r2)
; br %r14
function %store_f32_little(f32, i64) {
block0(v0: f32, v1: i64):
@@ -74,8 +81,9 @@ block0(v0: f32, v1: i64):
return
}
; check: lgdr %r3, %f0
; nextln: srlg %r3, %r3, 32
; nextln: strv %r3, 0(%r2)
; nextln: br %r14
; block0:
; lgdr %r3, %f0
; srlg %r4, %r3, 32
; strv %r4, 0(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %dynamic_heap_check(i64 vmctx, i32) -> i64 {
@@ -11,20 +11,20 @@ block0(v0: i64, v1: i32):
return v2
}
; check: Block 0:
; check: llgfr %r3, %r3
; nextln: lghi %r4, 0
; nextln: ag %r4, 0(%r2)
; nextln: clgr %r3, %r4
; nextln: jgnh label1 ; jg label2
; check: Block 1:
; check: agr %r2, %r3
; nextln: lghi %r5, 0
; nextln: clgr %r3, %r4
; nextln: locgrh %r2, %r5
; nextln: br %r14
; check: Block 2:
; check: trap
; block0:
; llgfr %r4, %r3
; lghi %r3, 0
; ag %r3, 0(%r2)
; clgr %r4, %r3
; jgnh label1 ; jg label2
; block1:
; agr %r2, %r4
; lghi %r5, 0
; clgr %r4, %r3
; locgrh %r2, %r5
; br %r14
; block2:
; trap
function %static_heap_check(i64 vmctx, i32) -> i64 {
gv0 = vmctx
@@ -35,15 +35,16 @@ block0(v0: i64, v1: i32):
return v2
}
; check: Block 0:
; check: llgfr %r3, %r3
; nextln: clgfi %r3, 65536
; nextln: jgnh label1 ; jg label2
; check: Block 1:
; check: agr %r2, %r3
; nextln: lghi %r4, 0
; nextln: clgfi %r3, 65536
; nextln: locgrh %r2, %r4
; nextln: br %r14
; check: Block 2:
; check: trap
; block0:
; llgfr %r3, %r3
; clgfi %r3, 65536
; jgnh label1 ; jg label2
; block1:
; agr %r2, %r3
; lghi %r4, 0
; clgfi %r3, 65536
; locgrh %r2, %r4
; br %r14
; block2:
; trap

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %icmp_slt_i64(i64, i64) -> b1 {
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: cgr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_ext32(i64, i32) -> b1 {
block0(v0: i64, v1: i32):
@@ -19,10 +20,11 @@ block0(v0: i64, v1: i32):
return v3
}
; check: cgfr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgfr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_imm16(i64) -> b1 {
block0(v0: i64):
@@ -31,10 +33,11 @@ block0(v0: i64):
return v2
}
; check: cghi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cghi %r2, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_imm32(i64) -> b1 {
block0(v0: i64):
@@ -43,10 +46,11 @@ block0(v0: i64):
return v2
}
; check: cgfi %r2, 32768
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgfi %r2, 32768
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_mem(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -55,10 +59,11 @@ block0(v0: i64, v1: i64):
return v3
}
; check: cg %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cg %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_sym(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -69,10 +74,11 @@ block0(v0: i64):
return v3
}
; check: cgrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_mem_ext16(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -81,10 +87,11 @@ block0(v0: i64, v1: i64):
return v3
}
; check: cgh %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgh %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_sym_ext16(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -95,10 +102,11 @@ block0(v0: i64):
return v3
}
; check: cghrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cghrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_mem_ext32(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -107,10 +115,11 @@ block0(v0: i64, v1: i64):
return v3
}
; check: cgf %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgf %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i64_sym_ext32(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -121,10 +130,11 @@ block0(v0: i64):
return v3
}
; check: cgfrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cgfrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32(i32, i32) -> b1 {
block0(v0: i32, v1: i32):
@@ -132,10 +142,11 @@ block0(v0: i32, v1: i32):
return v2
}
; check: cr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_imm16(i32) -> b1 {
block0(v0: i32):
@@ -144,10 +155,11 @@ block0(v0: i32):
return v2
}
; check: chi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; chi %r2, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_imm(i32) -> b1 {
block0(v0: i32):
@@ -156,10 +168,11 @@ block0(v0: i32):
return v2
}
; check: cfi %r2, 32768
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cfi %r2, 32768
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_mem(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -168,10 +181,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: c %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; c %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_memoff(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -180,10 +194,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: cy %r2, 4096(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cy %r2, 4096(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_sym(i32) -> b1 {
gv0 = symbol colocated %sym
@@ -194,10 +209,11 @@ block0(v0: i32):
return v3
}
; check: crl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; crl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_mem_ext16(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -206,10 +222,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: ch %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; ch %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_memoff_ext16(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -218,10 +235,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: chy %r2, 4096(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; chy %r2, 4096(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i32_sym_ext16(i32) -> b1 {
gv0 = symbol colocated %sym
@@ -232,10 +250,11 @@ block0(v0: i32):
return v3
}
; check: chrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; chrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i16(i16, i16) -> b1 {
block0(v0: i16, v1: i16):
@@ -243,12 +262,14 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lhr %r2, %r2
; nextln: lhr %r3, %r3
; nextln: cr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; lhr %r3, %r2
; lhr %r5, %r5
; cr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i16_imm(i16) -> b1 {
block0(v0: i16):
@@ -257,11 +278,12 @@ block0(v0: i16):
return v2
}
; check: lhr %r2, %r2
; nextln: chi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lhr %r5, %r2
; chi %r5, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i16_mem(i16, i64) -> b1 {
block0(v0: i16, v1: i64):
@@ -270,11 +292,12 @@ block0(v0: i16, v1: i64):
return v3
}
; check: lhr %r2, %r2
; nextln: ch %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lhr %r4, %r2
; ch %r4, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i16_sym(i16) -> b1 {
gv0 = symbol colocated %sym
@@ -285,11 +308,12 @@ block0(v0: i16):
return v3
}
; check: lhr %r2, %r2
; nextln: chrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lhr %r5, %r2
; chrl %r5, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i8(i8, i8) -> b1 {
block0(v0: i8, v1: i8):
@@ -297,12 +321,14 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lbr %r2, %r2
; nextln: lbr %r3, %r3
; nextln: cr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; lbr %r3, %r2
; lbr %r5, %r5
; cr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i8_imm(i8) -> b1 {
block0(v0: i8):
@@ -311,11 +337,12 @@ block0(v0: i8):
return v2
}
; check: lbr %r2, %r2
; nextln: chi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lbr %r5, %r2
; chi %r5, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_slt_i8_mem(i8, i64) -> b1 {
block0(v0: i8, v1: i64):
@@ -324,12 +351,14 @@ block0(v0: i8, v1: i64):
return v3
}
; check: lbr %r2, %r2
; nextln: lb %r3, 0(%r3)
; nextln: cr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; lbr %r3, %r2
; lb %r5, 0(%r5)
; cr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -337,10 +366,11 @@ block0(v0: i64, v1: i64):
return v2
}
; check: clgr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_ext32(i64, i32) -> b1 {
block0(v0: i64, v1: i32):
@@ -349,10 +379,11 @@ block0(v0: i64, v1: i32):
return v3
}
; check: clgfr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgfr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_imm(i64) -> b1 {
block0(v0: i64):
@@ -361,10 +392,11 @@ block0(v0: i64):
return v2
}
; check: clgfi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgfi %r2, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_mem(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -373,10 +405,11 @@ block0(v0: i64, v1: i64):
return v3
}
; check: clg %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clg %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_sym(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -387,10 +420,11 @@ block0(v0: i64):
return v3
}
; check: clgrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_mem_ext32(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -399,10 +433,11 @@ block0(v0: i64, v1: i64):
return v3
}
; check: clgf %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgf %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_sym_ext32(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -413,10 +448,11 @@ block0(v0: i64):
return v3
}
; check: clgfrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clgfrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_mem_ext16(i64, i64) -> b1 {
block0(v0: i64, v1: i64):
@@ -425,11 +461,12 @@ block0(v0: i64, v1: i64):
return v3
}
; check: llgh %r3, 0(%r3)
; check: clgr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; llgh %r4, 0(%r3)
; clgr %r2, %r4
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i64_sym_ext16(i64) -> b1 {
gv0 = symbol colocated %sym
@@ -440,10 +477,11 @@ block0(v0: i64):
return v3
}
; check: clghrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clghrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32(i32, i32) -> b1 {
block0(v0: i32, v1: i32):
@@ -451,10 +489,11 @@ block0(v0: i32, v1: i32):
return v2
}
; check: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clr %r2, %r3
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_imm(i32) -> b1 {
block0(v0: i32):
@@ -463,10 +502,11 @@ block0(v0: i32):
return v2
}
; check: clfi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clfi %r2, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_mem(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -475,10 +515,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: cl %r2, 0(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cl %r2, 0(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_memoff(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -487,10 +528,11 @@ block0(v0: i32, v1: i64):
return v3
}
; check: cly %r2, 4096(%r3)
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; cly %r2, 4096(%r3)
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_sym(i32) -> b1 {
gv0 = symbol colocated %sym
@@ -501,10 +543,11 @@ block0(v0: i32):
return v3
}
; check: clrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_mem_ext16(i32, i64) -> b1 {
block0(v0: i32, v1: i64):
@@ -513,11 +556,12 @@ block0(v0: i32, v1: i64):
return v3
}
; check: llh %r3, 0(%r3)
; check: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; llh %r4, 0(%r3)
; clr %r2, %r4
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i32_sym_ext16(i32) -> b1 {
gv0 = symbol colocated %sym
@@ -528,10 +572,11 @@ block0(v0: i32):
return v3
}
; check: clhrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; clhrl %r2, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i16(i16, i16) -> b1 {
block0(v0: i16, v1: i16):
@@ -539,12 +584,14 @@ block0(v0: i16, v1: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: llhr %r3, %r3
; nextln: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; llhr %r3, %r2
; llhr %r5, %r5
; clr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i16_imm(i16) -> b1 {
block0(v0: i16):
@@ -553,11 +600,12 @@ block0(v0: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: clfi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; llhr %r5, %r2
; clfi %r5, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i16_mem(i16, i64) -> b1 {
block0(v0: i16, v1: i64):
@@ -566,12 +614,14 @@ block0(v0: i16, v1: i64):
return v3
}
; check: llhr %r2, %r2
; nextln: llh %r3, 0(%r3)
; nextln: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; llhr %r3, %r2
; llh %r5, 0(%r5)
; clr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i16_mem(i16) -> b1 {
gv0 = symbol colocated %sym
@@ -582,11 +632,12 @@ block0(v0: i16):
return v3
}
; check: llhr %r2, %r2
; nextln: clhrl %r2, %sym + 0
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; llhr %r5, %r2
; clhrl %r5, %sym + 0
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i8(i8, i8) -> b1 {
block0(v0: i8, v1: i8):
@@ -594,12 +645,14 @@ block0(v0: i8, v1: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: llcr %r3, %r3
; nextln: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; llcr %r3, %r2
; llcr %r5, %r5
; clr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i8_imm(i8) -> b1 {
block0(v0: i8):
@@ -608,11 +661,12 @@ block0(v0: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: clfi %r2, 1
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; llcr %r5, %r2
; clfi %r5, 1
; lhi %r2, 0
; lochil %r2, 1
; br %r14
function %icmp_ult_i8_mem(i8, i64) -> b1 {
block0(v0: i8, v1: i64):
@@ -621,10 +675,12 @@ block0(v0: i8, v1: i64):
return v3
}
; check: llcr %r2, %r2
; nextln: llc %r3, 0(%r3)
; nextln: clr %r2, %r3
; nextln: lhi %r2, 0
; nextln: lochil %r2, 1
; nextln: br %r14
; block0:
; lgr %r5, %r3
; llcr %r3, %r2
; llc %r5, 0(%r5)
; clr %r3, %r5
; lhi %r2, 0
; lochil %r2, 1
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %f(i64) -> i64 {
@@ -28,24 +28,32 @@ block5(v5: i64):
return v6
}
; check: clgfi %r2, 3
; nextln: jghe label1
; nextln: sllg %r3, %r2, 2
; nextln: larl %r1, 14 ; agf %r1, 0(%r1, %r3) ; br %r1 ; jt_entries label3 label5 label7
; check: Block 3
; check: lghi %r3, 1
; nextln: jg
; check: Block 5
; check: lghi %r3, 2
; nextln: jg
; check: Block 7
; check: lghi %r3, 3
; nextln: jg
; check: agr %r2, %r3
; nextln: br %r14
; block0:
; clgfi %r2, 3
; jghe label1
; sllg %r5, %r2, 2
; larl %r1, 14 ; agf %r1, 0(%r1, %r5) ; br %r1 ; jt_entries label3 label5 label7
; block1:
; lghi %r4, 4
; jg label2
; block2:
; jg label9
; block3:
; lghi %r4, 1
; jg label4
; block4:
; jg label9
; block5:
; lghi %r4, 2
; jg label6
; block6:
; jg label9
; block7:
; lghi %r4, 3
; jg label8
; block8:
; jg label9
; block9:
; agr %r2, %r4
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %load_i64(i64) -> i64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: lrvg %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrvg %r2, 0(%r2)
; br %r14
function %load_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
; br %r14
function %uload8_i64(i64) -> i64 {
block0(v0: i64):
@@ -27,8 +29,9 @@ block0(v0: i64):
return v1
}
; check: llgc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llgc %r2, 0(%r2)
; br %r14
function %sload8_i64(i64) -> i64 {
block0(v0: i64):
@@ -36,8 +39,9 @@ block0(v0: i64):
return v1
}
; check: lgb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lgb %r2, 0(%r2)
; br %r14
function %uload16_i64(i64) -> i64 {
block0(v0: i64):
@@ -45,9 +49,10 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: llghr %r2, %r2
; nextln: br %r14
; block0:
; lrvh %r5, 0(%r2)
; llghr %r2, %r5
; br %r14
function %uload16_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -57,9 +62,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: llghr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
; llghr %r2, %r3
; br %r14
function %sload16_i64(i64) -> i64 {
block0(v0: i64):
@@ -67,9 +73,10 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: lghr %r2, %r2
; nextln: br %r14
; block0:
; lrvh %r5, 0(%r2)
; lghr %r2, %r5
; br %r14
function %sload16_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -79,9 +86,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: lghr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
; lghr %r2, %r3
; br %r14
function %uload32_i64(i64) -> i64 {
block0(v0: i64):
@@ -89,9 +97,10 @@ block0(v0: i64):
return v1
}
; check: lrv %r2, 0(%r2)
; nextln: llgfr %r2, %r2
; nextln: br %r14
; block0:
; lrv %r5, 0(%r2)
; llgfr %r2, %r5
; br %r14
function %uload32_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -101,9 +110,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; nextln: llgfr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrv %r3, 0(%r1)
; llgfr %r2, %r3
; br %r14
function %sload32_i64(i64) -> i64 {
block0(v0: i64):
@@ -111,9 +121,10 @@ block0(v0: i64):
return v1
}
; check: lrv %r2, 0(%r2)
; nextln: lgfr %r2, %r2
; nextln: br %r14
; block0:
; lrv %r5, 0(%r2)
; lgfr %r2, %r5
; br %r14
function %sload32_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -123,9 +134,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; nextln: lgfr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrv %r3, 0(%r1)
; lgfr %r2, %r3
; br %r14
function %load_i32(i64) -> i32 {
block0(v0: i64):
@@ -133,8 +145,9 @@ block0(v0: i64):
return v1
}
; check: lrv %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrv %r2, 0(%r2)
; br %r14
function %load_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -144,8 +157,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
; br %r14
function %uload8_i32(i64) -> i32 {
block0(v0: i64):
@@ -153,8 +167,9 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14
function %sload8_i32(i64) -> i32 {
block0(v0: i64):
@@ -162,8 +177,9 @@ block0(v0: i64):
return v1
}
; check: lb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lb %r2, 0(%r2)
; br %r14
function %uload16_i32(i64) -> i32 {
block0(v0: i64):
@@ -171,9 +187,10 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: llhr %r2, %r2
; nextln: br %r14
; block0:
; lrvh %r5, 0(%r2)
; llhr %r2, %r5
; br %r14
function %uload16_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -183,9 +200,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: llhr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
; llhr %r2, %r3
; br %r14
function %sload16_i32(i64) -> i32 {
block0(v0: i64):
@@ -193,9 +211,10 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: lhr %r2, %r2
; nextln: br %r14
; block0:
; lrvh %r5, 0(%r2)
; lhr %r2, %r5
; br %r14
function %sload16_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -205,9 +224,10 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: lhr %r2, %r2
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
; lhr %r2, %r3
; br %r14
function %load_i16(i64) -> i16 {
block0(v0: i64):
@@ -215,8 +235,9 @@ block0(v0: i64):
return v1
}
; check: lrvh %r2, 0(%r2)
; nextln: br %r14
; block0:
; lrvh %r2, 0(%r2)
; br %r14
function %load_i16_sym() -> i16 {
gv0 = symbol colocated %sym
@@ -226,8 +247,9 @@ block0:
return v1
}
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
; br %r14
function %uload8_i16(i64) -> i16 {
block0(v0: i64):
@@ -235,8 +257,9 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14
function %sload8_i16(i64) -> i16 {
block0(v0: i64):
@@ -244,8 +267,9 @@ block0(v0: i64):
return v1
}
; check: lb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lb %r2, 0(%r2)
; br %r14
function %load_i8(i64) -> i8 {
block0(v0: i64):
@@ -253,6 +277,7 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %load_i64(i64) -> i64 {
@@ -7,8 +7,9 @@ block0(v0: i64):
return v1
}
; check: lg %r2, 0(%r2)
; nextln: br %r14
; block0:
; lg %r2, 0(%r2)
; br %r14
function %load_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0:
return v1
}
; check: lgrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lgrl %r2, %sym + 0
; br %r14
function %uload8_i64(i64) -> i64 {
block0(v0: i64):
@@ -27,8 +29,9 @@ block0(v0: i64):
return v1
}
; check: llgc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llgc %r2, 0(%r2)
; br %r14
function %sload8_i64(i64) -> i64 {
block0(v0: i64):
@@ -36,8 +39,9 @@ block0(v0: i64):
return v1
}
; check: lgb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lgb %r2, 0(%r2)
; br %r14
function %uload16_i64(i64) -> i64 {
block0(v0: i64):
@@ -45,8 +49,9 @@ block0(v0: i64):
return v1
}
; check: llgh %r2, 0(%r2)
; nextln: br %r14
; block0:
; llgh %r2, 0(%r2)
; br %r14
function %uload16_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -56,8 +61,9 @@ block0:
return v1
}
; check: llghrl %r2, %sym + 0
; nextln: br %r14
; block0:
; llghrl %r2, %sym + 0
; br %r14
function %sload16_i64(i64) -> i64 {
block0(v0: i64):
@@ -65,8 +71,9 @@ block0(v0: i64):
return v1
}
; check: lgh %r2, 0(%r2)
; nextln: br %r14
; block0:
; lgh %r2, 0(%r2)
; br %r14
function %sload16_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -76,8 +83,9 @@ block0:
return v1
}
; check: lghrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lghrl %r2, %sym + 0
; br %r14
function %uload32_i64(i64) -> i64 {
block0(v0: i64):
@@ -85,8 +93,9 @@ block0(v0: i64):
return v1
}
; check: llgf %r2, 0(%r2)
; nextln: br %r14
; block0:
; llgf %r2, 0(%r2)
; br %r14
function %uload32_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -96,8 +105,9 @@ block0:
return v1
}
; check: llgfrl %r2, %sym + 0
; nextln: br %r14
; block0:
; llgfrl %r2, %sym + 0
; br %r14
function %sload32_i64(i64) -> i64 {
block0(v0: i64):
@@ -105,8 +115,9 @@ block0(v0: i64):
return v1
}
; check: lgf %r2, 0(%r2)
; nextln: br %r14
; block0:
; lgf %r2, 0(%r2)
; br %r14
function %sload32_i64_sym() -> i64 {
gv0 = symbol colocated %sym
@@ -116,8 +127,9 @@ block0:
return v1
}
; check: lgfrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lgfrl %r2, %sym + 0
; br %r14
function %load_i32(i64) -> i32 {
block0(v0: i64):
@@ -125,8 +137,9 @@ block0(v0: i64):
return v1
}
; check: l %r2, 0(%r2)
; nextln: br %r14
; block0:
; l %r2, 0(%r2)
; br %r14
function %load_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -136,8 +149,9 @@ block0:
return v1
}
; check: lrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lrl %r2, %sym + 0
; br %r14
function %load_i32_off(i64) -> i32 {
block0(v0: i64):
@@ -145,8 +159,9 @@ block0(v0: i64):
return v1
}
; check: ly %r2, 4096(%r2)
; nextln: br %r14
; block0:
; ly %r2, 4096(%r2)
; br %r14
function %uload8_i32(i64) -> i32 {
block0(v0: i64):
@@ -154,8 +169,9 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14
function %sload8_i32(i64) -> i32 {
block0(v0: i64):
@@ -163,8 +179,9 @@ block0(v0: i64):
return v1
}
; check: lb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lb %r2, 0(%r2)
; br %r14
function %uload16_i32(i64) -> i32 {
block0(v0: i64):
@@ -172,8 +189,9 @@ block0(v0: i64):
return v1
}
; check: llh %r2, 0(%r2)
; nextln: br %r14
; block0:
; llh %r2, 0(%r2)
; br %r14
function %uload16_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -183,8 +201,9 @@ block0:
return v1
}
; check: llhrl %r2, %sym + 0
; nextln: br %r14
; block0:
; llhrl %r2, %sym + 0
; br %r14
function %sload16_i32(i64) -> i32 {
block0(v0: i64):
@@ -192,8 +211,9 @@ block0(v0: i64):
return v1
}
; check: lh %r2, 0(%r2)
; nextln: br %r14
; block0:
; lh %r2, 0(%r2)
; br %r14
function %sload16_i32_off(i64) -> i32 {
block0(v0: i64):
@@ -201,8 +221,9 @@ block0(v0: i64):
return v1
}
; check: lhy %r2, 4096(%r2)
; nextln: br %r14
; block0:
; lhy %r2, 4096(%r2)
; br %r14
function %sload16_i32_sym() -> i32 {
gv0 = symbol colocated %sym
@@ -212,8 +233,9 @@ block0:
return v1
}
; check: lhrl %r2, %sym + 0
; nextln: br %r14
; block0:
; lhrl %r2, %sym + 0
; br %r14
function %load_i16(i64) -> i16 {
block0(v0: i64):
@@ -221,8 +243,9 @@ block0(v0: i64):
return v1
}
; check: llh %r2, 0(%r2)
; nextln: br %r14
; block0:
; llh %r2, 0(%r2)
; br %r14
function %load_i16_sym() -> i16 {
gv0 = symbol colocated %sym
@@ -232,8 +255,9 @@ block0:
return v1
}
; check: llhrl %r2, %sym + 0
; nextln: br %r14
; block0:
; llhrl %r2, %sym + 0
; br %r14
function %uload8_i16(i64) -> i16 {
block0(v0: i64):
@@ -241,8 +265,9 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14
function %sload8_i16(i64) -> i16 {
block0(v0: i64):
@@ -250,8 +275,9 @@ block0(v0: i64):
return v1
}
; check: lb %r2, 0(%r2)
; nextln: br %r14
; block0:
; lb %r2, 0(%r2)
; br %r14
function %load_i8(i64) -> i8 {
block0(v0: i64):
@@ -259,6 +285,7 @@ block0(v0: i64):
return v1
}
; check: llc %r2, 0(%r2)
; nextln: br %r14
; block0:
; llc %r2, 0(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;; Test default (non-SpiderMonkey) ABI.
@@ -11,11 +11,12 @@ block1:
return v0, v1, v2, v3
}
; check: lghi %r2, 1
; nextln: lghi %r3, 2
; nextln: lghi %r4, 3
; nextln: lghi %r5, 4
; nextln: br %r14
; block0:
; lghi %r2, 1
; lghi %r3, 2
; lghi %r4, 3
; lghi %r5, 4
; br %r14
function %f1() -> i64, i64, i64, i64, i64, i64 {
block1:
@@ -28,20 +29,20 @@ block1:
return v0, v1, v2, v3, v4, v5
}
; check: stmg %r12, %r15, 96(%r15)
; nextln: lgr %r14, %r2
; nextln: lghi %r2, 1
; nextln: lghi %r3, 2
; nextln: lghi %r4, 3
; nextln: lghi %r5, 4
; nextln: lghi %r13, 5
; nextln: lghi %r12, 6
; nextln: stg %r13, 0(%r14)
; nextln: stg %r12, 8(%r14)
; nextln: lmg %r12, %r15, 96(%r15)
; nextln: br %r14
; stmg %r6, %r15, 48(%r15)
; block0:
; lgr %r12, %r2
; lghi %r2, 1
; lghi %r3, 2
; lghi %r4, 3
; lghi %r5, 4
; lghi %r10, 5
; lghi %r6, 6
; stg %r10, 0(%r12)
; stg %r6, 8(%r12)
; lmg %r6, %r15, 48(%r15)
; br %r14
;; Test default (non-SpiderMonkey) ABI.
function %f3() -> f64, f64, f64, f64 {
block1:
v0 = f64const 0x0.0
@@ -51,11 +52,12 @@ block1:
return v0, v1, v2, v3
}
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
; br %r14
function %f4() -> f64, f64, f64, f64, f64, f64 {
block1:
@@ -68,12 +70,14 @@ block1:
return v0, v1, v2, v3, v4, v5
}
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 4 ; ld %f1, 0(%r1)
; nextln: bras %r1, 12 ; data.f64 5 ; ld %f3, 0(%r1)
; nextln: std %f1, 0(%r2)
; nextln: std %f3, 8(%r2)
; nextln: br %r14
; block0:
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
; bras %r1, 12 ; data.f64 4 ; ld %f5, 0(%r1)
; bras %r1, 12 ; data.f64 5 ; ld %f7, 0(%r1)
; std %f5, 0(%r2)
; std %f7, 8(%r2)
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %f0(r64, r64) -> r64 {
@@ -6,8 +6,9 @@ block0(v0: r64, v1: r64):
return v1
}
; check: lgr %r2, %r3
; nextln: br %r14
; block0:
; lgr %r2, %r3
; br %r14
function %f1(r64) -> b1 {
block0(v0: r64):
@@ -15,10 +16,11 @@ block0(v0: r64):
return v1
}
; check: cghi %r2, 0
; nextln: lhi %r2, 0
; nextln: lochie %r2, 1
; nextln: br %r14
; block0:
; cghi %r2, 0
; lhi %r2, 0
; lochie %r2, 1
; br %r14
function %f2(r64) -> b1 {
block0(v0: r64):
@@ -26,10 +28,11 @@ block0(v0: r64):
return v1
}
; check: cghi %r2, -1
; nextln: lhi %r2, 0
; nextln: lochie %r2, 1
; nextln: br %r14
; block0:
; cghi %r2, -1
; lhi %r2, 0
; lochie %r2, 1
; br %r14
function %f3() -> r64 {
block0:
@@ -37,8 +40,9 @@ block0:
return v0
}
; check: lghi %r2, 0
; nextln: br %r14
; block0:
; lghi %r2, 0
; br %r14
function %f4(r64, r64) -> r64, r64, r64 {
fn0 = %f(r64) -> b1
@@ -61,41 +65,36 @@ block3(v7: r64, v8: r64):
return v7, v8, v9
}
; check: Block 0:
; check: stmg %r12, %r15, 96(%r15)
; nextln: aghi %r15, -192
; nextln: virtual_sp_offset_adjust 160
; nextln: lgr %r13, %r2
; nextln: lgr %r12, %r3
; nextln: lgr %r2, %r13
; nextln: bras %r1, 12 ; data %f + 0 ; lg %r3, 0(%r1)
; nextln: stg %r2, 168(%r15)
; nextln: stg %r13, 176(%r15)
; nextln: stg %r12, 184(%r15)
; nextln: (safepoint: slots [S0, S1, S2]
; nextln: basr %r14, %r3
; nextln: lg %r13, 176(%r15)
; nextln: lg %r12, 184(%r15)
; nextln: la %r3, 160(%r15)
; nextln: stg %r13, 0(%r3)
; nextln: llcr %r2, %r2
; nextln: chi %r2, 0
; nextln: jgnlh label1 ; jg label3
; check: Block 1:
; check: jg label2
; check: Block 2:
; check: lgr %r2, %r12
; nextln: jg label5
; check: Block 3:
; check: jg label4
; check: Block 4:
; check: lgr %r2, %r13
; nextln: lgr %r13, %r12
; nextln: jg label5
; check: Block 5:
; check: la %r3, 160(%r15)
; nextln: lg %r3, 0(%r3)
; nextln: lgr %r4, %r3
; nextln: lgr %r3, %r13
; nextln: lmg %r12, %r15, 288(%r15)
; nextln: br %r14
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -184
; virtual_sp_offset_adjust 160
; block0:
; lgr %r4, %r3
; lgr %r3, %r2
; bras %r1, 12 ; data %f + 0 ; lg %r5, 0(%r1)
; stg %r3, 168(%r15)
; stg %r4, 176(%r15)
; basr %r14, %r5
; lg %r3, 168(%r15)
; la %r4, 160(%r15)
; stg %r3, 0(%r4)
; llcr %r4, %r2
; chi %r4, 0
; jgnlh label1 ; jg label3
; block1:
; jg label2
; block2:
; lg %r2, 176(%r15)
; jg label5
; block3:
; jg label4
; block4:
; lgr %r2, %r3
; lg %r3, 176(%r15)
; jg label5
; block5:
; la %r4, 160(%r15)
; lg %r4, 0(%r4)
; lmg %r14, %r15, 296(%r15)
; br %r14

View File

@@ -1,12 +1,16 @@
test compile
test compile precise-output
target s390x
; FIXME: not yet supported
function %uaddsat64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
; v2 = uadd_sat.i64 v0, v1
;;SKIP v2 = uadd_sat.i64 v0, v1
v2 = iconst.i64 0
return v2
}
; block0:
; lghi %r2, 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,9 +11,10 @@ block0(v0: i64, v1: i64):
return v2
}
; check: lcgr %r3, %r3
; nextln: rllg %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; lcgr %r3, %r3
; rllg %r2, %r2, 0(%r3)
; br %r14
function %rotr_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -22,8 +23,9 @@ block0(v0: i64):
return v2
}
; check: rllg %r2, %r2, 47
; nextln: br %r14
; block0:
; rllg %r2, %r2, 47
; br %r14
function %rotr_i32_reg(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -31,9 +33,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: lcr %r3, %r3
; nextln: rll %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; lcr %r3, %r3
; rll %r2, %r2, 0(%r3)
; br %r14
function %rotr_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -42,8 +45,9 @@ block0(v0: i32):
return v2
}
; check: rll %r2, %r2, 15
; nextln: br %r14
; block0:
; rll %r2, %r2, 15
; br %r14
function %rotr_i16_reg(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -51,14 +55,15 @@ block0(v0: i16, v1: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: lcr %r4, %r3
; nextln: nill %r3, 15
; nextln: nill %r4, 15
; nextln: sllk %r4, %r2, 0(%r4)
; nextln: srlk %r2, %r2, 0(%r3)
; nextln: ork %r2, %r4, %r2
; nextln: br %r14
; block0:
; llhr %r4, %r2
; lcr %r5, %r3
; nill %r3, 15
; nill %r5, 15
; sllk %r5, %r4, 0(%r5)
; srlk %r3, %r4, 0(%r3)
; ork %r2, %r5, %r3
; br %r14
function %rotr_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -67,11 +72,12 @@ block0(v0: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: sllk %r3, %r2, 6
; nextln: srlk %r2, %r2, 10
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
; block0:
; llhr %r5, %r2
; sllk %r3, %r5, 6
; srlk %r5, %r5, 10
; ork %r2, %r3, %r5
; br %r14
function %rotr_i8_reg(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -79,14 +85,15 @@ block0(v0: i8, v1: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: lcr %r4, %r3
; nextln: nill %r3, 7
; nextln: nill %r4, 7
; nextln: sllk %r4, %r2, 0(%r4)
; nextln: srlk %r2, %r2, 0(%r3)
; nextln: ork %r2, %r4, %r2
; nextln: br %r14
; block0:
; llcr %r4, %r2
; lcr %r5, %r3
; nill %r3, 7
; nill %r5, 7
; sllk %r5, %r4, 0(%r5)
; srlk %r3, %r4, 0(%r3)
; ork %r2, %r5, %r3
; br %r14
function %rotr_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -95,15 +102,12 @@ block0(v0: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: sllk %r3, %r2, 5
; nextln: srlk %r2, %r2, 3
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ROTL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llcr %r5, %r2
; sllk %r3, %r5, 5
; srlk %r5, %r5, 3
; ork %r2, %r3, %r5
; br %r14
function %rotl_i64_reg(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -111,8 +115,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: rllg %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; rllg %r2, %r2, 0(%r3)
; br %r14
function %rotl_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -121,8 +126,9 @@ block0(v0: i64):
return v2
}
; check: rllg %r2, %r2, 17
; nextln: br %r14
; block0:
; rllg %r2, %r2, 17
; br %r14
function %rotl_i32_reg(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -130,8 +136,9 @@ block0(v0: i32, v1: i32):
return v2
}
; check: rll %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; rll %r2, %r2, 0(%r3)
; br %r14
function %rotl_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -140,8 +147,9 @@ block0(v0: i32):
return v2
}
; check: rll %r2, %r2, 17
; nextln: br %r14
; block0:
; rll %r2, %r2, 17
; br %r14
function %rotl_i16_reg(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -149,14 +157,15 @@ block0(v0: i16, v1: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: lcr %r4, %r3
; nextln: nill %r3, 15
; nextln: nill %r4, 15
; nextln: sllk %r3, %r2, 0(%r3)
; nextln: srlk %r2, %r2, 0(%r4)
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
; block0:
; llhr %r4, %r2
; lcr %r5, %r3
; nill %r3, 15
; nill %r5, 15
; sllk %r2, %r4, 0(%r3)
; srlk %r3, %r4, 0(%r5)
; or %r2, %r3
; br %r14
function %rotl_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -165,11 +174,12 @@ block0(v0: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: sllk %r3, %r2, 10
; nextln: srlk %r2, %r2, 6
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
; block0:
; llhr %r5, %r2
; sllk %r3, %r5, 10
; srlk %r5, %r5, 6
; ork %r2, %r3, %r5
; br %r14
function %rotl_i8_reg(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -177,14 +187,15 @@ block0(v0: i8, v1: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: lcr %r4, %r3
; nextln: nill %r3, 7
; nextln: nill %r4, 7
; nextln: sllk %r3, %r2, 0(%r3)
; nextln: srlk %r2, %r2, 0(%r4)
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
; block0:
; llcr %r4, %r2
; lcr %r5, %r3
; nill %r3, 7
; nill %r5, 7
; sllk %r2, %r4, 0(%r3)
; srlk %r3, %r4, 0(%r5)
; or %r2, %r3
; br %r14
function %rotr_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -193,15 +204,12 @@ block0(v0: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: sllk %r3, %r2, 3
; nextln: srlk %r2, %r2, 5
; nextln: ork %r2, %r3, %r2
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; USHR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llcr %r5, %r2
; sllk %r3, %r5, 3
; srlk %r5, %r5, 5
; ork %r2, %r3, %r5
; br %r14
function %ushr_i64_reg(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -209,8 +217,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: srlg %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; srlg %r2, %r2, 0(%r3)
; br %r14
function %ushr_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -219,8 +228,9 @@ block0(v0: i64):
return v2
}
; check: srlg %r2, %r2, 17
; nextln: br %r14
; block0:
; srlg %r2, %r2, 17
; br %r14
function %ushr_i32_reg(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -228,8 +238,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: srlk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; nill %r3, 31
; srlk %r2, %r2, 0(%r3)
; br %r14
function %ushr_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -238,8 +250,9 @@ block0(v0: i32):
return v2
}
; check: srlk %r2, %r2, 17
; nextln: br %r14
; block0:
; srlk %r2, %r2, 17
; br %r14
function %ushr_i16_reg(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -247,10 +260,11 @@ block0(v0: i16, v1: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: nill %r3, 15
; nextln: srlk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; llhr %r4, %r2
; nill %r3, 15
; srlk %r2, %r4, 0(%r3)
; br %r14
function %ushr_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -259,9 +273,10 @@ block0(v0: i16):
return v2
}
; check: llhr %r2, %r2
; nextln: srlk %r2, %r2, 10
; nextln: br %r14
; block0:
; llhr %r5, %r2
; srlk %r2, %r5, 10
; br %r14
function %ushr_i8_reg(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -269,10 +284,11 @@ block0(v0: i8, v1: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: nill %r3, 7
; nextln: srlk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; llcr %r4, %r2
; nill %r3, 7
; srlk %r2, %r4, 0(%r3)
; br %r14
function %ushr_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -281,13 +297,10 @@ block0(v0: i8):
return v2
}
; check: llcr %r2, %r2
; nextln: srlk %r2, %r2, 3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ISHL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; llcr %r5, %r2
; srlk %r2, %r5, 3
; br %r14
function %ishl_i64_reg(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -295,8 +308,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: sllg %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; sllg %r2, %r2, 0(%r3)
; br %r14
function %ishl_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -305,8 +319,9 @@ block0(v0: i64):
return v2
}
; check: sllg %r2, %r2, 17
; nextln: br %r14
; block0:
; sllg %r2, %r2, 17
; br %r14
function %ishl_i32_reg(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -314,8 +329,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: sllk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; nill %r3, 31
; sllk %r2, %r2, 0(%r3)
; br %r14
function %ishl_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -324,8 +341,9 @@ block0(v0: i32):
return v2
}
; check: sllk %r2, %r2, 17
; nextln: br %r14
; block0:
; sllk %r2, %r2, 17
; br %r14
function %ishl_i16_reg(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -333,9 +351,10 @@ block0(v0: i16, v1: i16):
return v2
}
; check: nill %r3, 15
; nextln: sllk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; nill %r3, 15
; sllk %r2, %r2, 0(%r3)
; br %r14
function %ishl_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -344,8 +363,9 @@ block0(v0: i16):
return v2
}
; check: sllk %r2, %r2, 10
; nextln: br %r14
; block0:
; sllk %r2, %r2, 10
; br %r14
function %ishl_i8_reg(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -353,9 +373,10 @@ block0(v0: i8, v1: i8):
return v2
}
; check: nill %r3, 7
; nextln: sllk %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; nill %r3, 7
; sllk %r2, %r2, 0(%r3)
; br %r14
function %ishl_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -364,12 +385,9 @@ block0(v0: i8):
return v2
}
; check: sllk %r2, %r2, 3
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SSHR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; sllk %r2, %r2, 3
; br %r14
function %sshr_i64_reg(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
@@ -377,8 +395,9 @@ block0(v0: i64, v1: i64):
return v2
}
; check: srag %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; srag %r2, %r2, 0(%r3)
; br %r14
function %sshr_i64_imm(i64) -> i64 {
block0(v0: i64):
@@ -387,8 +406,9 @@ block0(v0: i64):
return v2
}
; check: srag %r2, %r2, 17
; nextln: br %r14
; block0:
; srag %r2, %r2, 17
; br %r14
function %sshr_i32_reg(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -396,8 +416,10 @@ block0(v0: i32, v1: i32):
return v2
}
; check: srak %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; nill %r3, 31
; srak %r2, %r2, 0(%r3)
; br %r14
function %sshr_i32_imm(i32) -> i32 {
block0(v0: i32):
@@ -406,8 +428,9 @@ block0(v0: i32):
return v2
}
; check: srak %r2, %r2, 17
; nextln: br %r14
; block0:
; srak %r2, %r2, 17
; br %r14
function %sshr_i16_reg(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
@@ -415,10 +438,11 @@ block0(v0: i16, v1: i16):
return v2
}
; check: lhr %r2, %r2
; nextln: nill %r3, 15
; nextln: srak %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; lhr %r4, %r2
; nill %r3, 15
; srak %r2, %r4, 0(%r3)
; br %r14
function %sshr_i16_imm(i16) -> i16 {
block0(v0: i16):
@@ -427,9 +451,10 @@ block0(v0: i16):
return v2
}
; check: lhr %r2, %r2
; nextln: srak %r2, %r2, 10
; nextln: br %r14
; block0:
; lhr %r5, %r2
; srak %r2, %r5, 10
; br %r14
function %sshr_i8_reg(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
@@ -437,10 +462,11 @@ block0(v0: i8, v1: i8):
return v2
}
; check: lbr %r2, %r2
; nextln: nill %r3, 7
; nextln: srak %r2, %r2, 0(%r3)
; nextln: br %r14
; block0:
; lbr %r4, %r2
; nill %r3, 7
; srak %r2, %r4, 0(%r3)
; br %r14
function %sshr_i8_imm(i8) -> i8 {
block0(v0: i8):
@@ -449,7 +475,8 @@ block0(v0: i8):
return v2
}
; check: lbr %r2, %r2
; nextln: srak %r2, %r2, 3
; nextln: br %r14
; block0:
; lbr %r5, %r2
; srak %r2, %r5, 3
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %foo() {
@@ -6,12 +6,16 @@ block0:
return
}
; block0:
; br %r14
function %stack_limit_leaf_zero(i64 stack_limit) {
block0(v0: i64):
return
}
; check: br %r14
; block0:
; br %r14
function %stack_limit_gv_leaf_zero(i64 vmctx) {
gv0 = vmctx
@@ -22,8 +26,8 @@ block0(v0: i64):
return
}
; check: br %r14
; block0:
; br %r14
function %stack_limit_call_zero(i64 stack_limit) {
fn0 = %foo()
@@ -32,14 +36,15 @@ block0(v0: i64):
return
}
; check: clgrtle %r15, %r2
; nextln: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: bras %r1, 12 ; data %foo + 0 ; lg %r2, 0(%r1)
; nextln: basr %r14, %r2
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; clgrtle %r15, %r2
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; bras %r1, 12 ; data %foo + 0 ; lg %r4, 0(%r1)
; basr %r14, %r4
; lmg %r14, %r15, 272(%r15)
; br %r14
function %stack_limit_gv_call_zero(i64 vmctx) {
gv0 = vmctx
@@ -52,16 +57,17 @@ block0(v0: i64):
return
}
; check: lg %r1, 0(%r2)
; nextln: lg %r1, 4(%r1)
; nextln: clgrtle %r15, %r1
; nextln: stmg %r14, %r15, 112(%r15)
; nextln: aghi %r15, -160
; nextln: virtual_sp_offset_adjust 160
; nextln: bras %r1, 12 ; data %foo + 0 ; lg %r2, 0(%r1)
; nextln: basr %r14, %r2
; nextln: lmg %r14, %r15, 272(%r15)
; nextln: br %r14
; lg %r1, 0(%r2)
; lg %r1, 4(%r1)
; clgrtle %r15, %r1
; stmg %r14, %r15, 112(%r15)
; aghi %r15, -160
; virtual_sp_offset_adjust 160
; block0:
; bras %r1, 12 ; data %foo + 0 ; lg %r4, 0(%r1)
; basr %r14, %r4
; lmg %r14, %r15, 272(%r15)
; br %r14
function %stack_limit(i64 stack_limit) {
ss0 = explicit_slot 168
@@ -69,11 +75,12 @@ block0(v0: i64):
return
}
; check: la %r1, 168(%r2)
; nextln: clgrtle %r15, %r1
; nextln: aghi %r15, -168
; nextln: aghi %r15, 168
; nextln: br %r14
; la %r1, 168(%r2)
; clgrtle %r15, %r1
; aghi %r15, -168
; block0:
; aghi %r15, 168
; br %r14
function %large_stack_limit(i64 stack_limit) {
ss0 = explicit_slot 400000
@@ -81,12 +88,13 @@ block0(v0: i64):
return
}
; check: clgrtle %r15, %r2
; nextln: lay %r1, 400000(%r2)
; nextln: clgrtle %r15, %r1
; nextln: agfi %r15, -400000
; nextln: agfi %r15, 400000
; nextln: br %r14
; clgrtle %r15, %r2
; lay %r1, 400000(%r2)
; clgrtle %r15, %r1
; agfi %r15, -400000
; block0:
; agfi %r15, 400000
; br %r14
function %huge_stack_limit(i64 stack_limit) {
ss0 = explicit_slot 4000000
@@ -94,13 +102,14 @@ block0(v0: i64):
return
}
; check: clgrtle %r15, %r2
; nextln: lgr %r1, %r2
; nextln: algfi %r1, 4000000
; nextln: clgrtle %r15, %r1
; nextln: agfi %r15, -4000000
; nextln: agfi %r15, 4000000
; nextln: br %r14
; clgrtle %r15, %r2
; lgr %r1, %r2
; algfi %r1, 4000000
; clgrtle %r15, %r1
; agfi %r15, -4000000
; block0:
; agfi %r15, 4000000
; br %r14
function %limit_preamble(i64 vmctx) {
gv0 = vmctx
@@ -112,13 +121,14 @@ block0(v0: i64):
return
}
; check: lg %r1, 0(%r2)
; nextln: lg %r1, 4(%r1)
; nextln: la %r1, 24(%r1)
; nextln: clgrtle %r15, %r1
; nextln: aghi %r15, -24
; nextln: aghi %r15, 24
; nextln: br %r14
; lg %r1, 0(%r2)
; lg %r1, 4(%r1)
; la %r1, 24(%r1)
; clgrtle %r15, %r1
; aghi %r15, -24
; block0:
; aghi %r15, 24
; br %r14
function %limit_preamble_large(i64 vmctx) {
gv0 = vmctx
@@ -130,14 +140,15 @@ block0(v0: i64):
return
}
; check: lg %r1, 0(%r2)
; nextln: lg %r1, 4(%r1)
; nextln: clgrtle %r15, %r1
; nextln: lay %r1, 400000(%r1)
; nextln: clgrtle %r15, %r1
; nextln: agfi %r15, -400000
; nextln: agfi %r15, 400000
; nextln: br %r14
; lg %r1, 0(%r2)
; lg %r1, 4(%r1)
; clgrtle %r15, %r1
; lay %r1, 400000(%r1)
; clgrtle %r15, %r1
; agfi %r15, -400000
; block0:
; agfi %r15, 400000
; br %r14
function %limit_preamble_huge(i64 vmctx) {
gv0 = vmctx
@@ -149,14 +160,15 @@ block0(v0: i64):
return
}
; check: lg %r1, 0(%r2)
; nextln: lg %r1, 4(%r1)
; nextln: clgrtle %r15, %r1
; nextln: algfi %r1, 4000000
; nextln: clgrtle %r15, %r1
; nextln: agfi %r15, -4000000
; nextln: agfi %r15, 4000000
; nextln: br %r14
; lg %r1, 0(%r2)
; lg %r1, 4(%r1)
; clgrtle %r15, %r1
; algfi %r1, 4000000
; clgrtle %r15, %r1
; agfi %r15, -4000000
; block0:
; agfi %r15, 4000000
; br %r14
function %limit_preamble_huge_offset(i64 vmctx) {
gv0 = vmctx
@@ -167,9 +179,11 @@ block0(v0: i64):
return
}
; check: lgfi %r1, 1000000 ; lg %r1, 0(%r1,%r2)
; nextln: la %r1, 24(%r1)
; nextln: clgrtle %r15, %r1
; nextln: aghi %r15, -24
; nextln: aghi %r15, 24
; nextln: br %r14
; lgfi %r1, 1000000 ; lg %r1, 0(%r1,%r2)
; la %r1, 24(%r1)
; clgrtle %r15, %r1
; aghi %r15, -24
; block0:
; aghi %r15, 24
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
; FIXME: Should allocate register save area.
@@ -11,10 +11,11 @@ block0:
return v0
}
; check: aghi %r15, -8
; nextln: la %r2, 0(%r15)
; nextln: aghi %r15, 8
; nextln: br %r14
; aghi %r15, -8
; block0:
; la %r2, 0(%r15)
; aghi %r15, 8
; br %r14
function %stack_addr_big() -> i64 {
ss0 = explicit_slot 100000
@@ -25,12 +26,11 @@ block0:
return v0
}
; check: agfi %r15, -100008
; nextln: la %r2, 0(%r15)
; nextln: agfi %r15, 100008
; nextln: br %r14
; FIXME: don't use stack_addr legalization for stack_load and stack_store
; agfi %r15, -100008
; block0:
; la %r2, 0(%r15)
; agfi %r15, 100008
; br %r14
function %stack_load_small() -> i64 {
ss0 = explicit_slot 8
@@ -40,11 +40,12 @@ block0:
return v0
}
; check: aghi %r15, -8
; nextln: la %r2, 0(%r15)
; nextln: lg %r2, 0(%r2)
; nextln: aghi %r15, 8
; nextln: br %r14
; aghi %r15, -8
; block0:
; la %r4, 0(%r15)
; lg %r2, 0(%r4)
; aghi %r15, 8
; br %r14
function %stack_load_big() -> i64 {
ss0 = explicit_slot 100000
@@ -55,12 +56,12 @@ block0:
return v0
}
; check: agfi %r15, -100008
; nextln: la %r2, 0(%r15)
; nextln: lg %r2, 0(%r2)
; nextln: agfi %r15, 100008
; nextln: br %r14
; agfi %r15, -100008
; block0:
; la %r4, 0(%r15)
; lg %r2, 0(%r4)
; agfi %r15, 100008
; br %r14
function %stack_store_small(i64) {
ss0 = explicit_slot 8
@@ -70,11 +71,12 @@ block0(v0: i64):
return
}
; check: aghi %r15, -8
; nextln: la %r3, 0(%r15)
; nextln: stg %r2, 0(%r3)
; nextln: aghi %r15, 8
; nextln: br %r14
; aghi %r15, -8
; block0:
; la %r4, 0(%r15)
; stg %r2, 0(%r4)
; aghi %r15, 8
; br %r14
function %stack_store_big(i64) {
ss0 = explicit_slot 100000
@@ -85,9 +87,10 @@ block0(v0: i64):
return
}
; check: agfi %r15, -100008
; nextln: la %r3, 0(%r15)
; nextln: stg %r2, 0(%r3)
; nextln: agfi %r15, 100008
; nextln: br %r14
; agfi %r15, -100008
; block0:
; la %r4, 0(%r15)
; stg %r2, 0(%r4)
; agfi %r15, 100008
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %store_i64(i64, i64) {
@@ -7,8 +7,9 @@ block0(v0: i64, v1: i64):
return
}
; check: strvg %r2, 0(%r3)
; nextln: br %r14
; block0:
; strvg %r2, 0(%r3)
; br %r14
function %store_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0(v0: i64):
return
}
; check: larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
; br %r14
function %store_imm_i64(i64) {
block0(v0: i64):
@@ -28,9 +30,10 @@ block0(v0: i64):
return
}
; check: lghi %r3, 12345
; nextln: strvg %r3, 0(%r2)
; nextln: br %r14
; block0:
; lghi %r4, 12345
; strvg %r4, 0(%r2)
; br %r14
function %istore8_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -38,8 +41,9 @@ block0(v0: i64, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i64(i64) {
block0(v0: i64):
@@ -48,8 +52,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %istore16_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -57,8 +62,9 @@ block0(v0: i64, v1: i64):
return
}
; check: strvh %r2, 0(%r3)
; nextln: br %r14
; block0:
; strvh %r2, 0(%r3)
; br %r14
function %istore16_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -68,8 +74,9 @@ block0(v0: i64):
return
}
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; br %r14
function %istore16_imm_i64(i64) {
block0(v0: i64):
@@ -78,8 +85,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 14640
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 14640
; br %r14
function %istore32_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -87,8 +95,9 @@ block0(v0: i64, v1: i64):
return
}
; check: strv %r2, 0(%r3)
; nextln: br %r14
; block0:
; strv %r2, 0(%r3)
; br %r14
function %istore32_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -98,8 +107,9 @@ block0(v0: i64):
return
}
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; br %r14
function %istore32_imm_i64(i64) {
block0(v0: i64):
@@ -108,9 +118,10 @@ block0(v0: i64):
return
}
; check: lghi %r3, 12345
; nextln: strv %r3, 0(%r2)
; nextln: br %r14
; block0:
; lghi %r4, 12345
; strv %r4, 0(%r2)
; br %r14
function %store_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -118,8 +129,9 @@ block0(v0: i32, v1: i64):
return
}
; check: strv %r2, 0(%r3)
; nextln: br %r14
; block0:
; strv %r2, 0(%r3)
; br %r14
function %store_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -129,8 +141,9 @@ block0(v0: i32):
return
}
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
; br %r14
function %store_imm_i32(i64) {
block0(v0: i64):
@@ -139,9 +152,10 @@ block0(v0: i64):
return
}
; check: lhi %r3, 12345
; nextln: strv %r3, 0(%r2)
; nextln: br %r14
; block0:
; lhi %r4, 12345
; strv %r4, 0(%r2)
; br %r14
function %istore8_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -149,8 +163,9 @@ block0(v0: i32, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i32(i64) {
block0(v0: i64):
@@ -159,8 +174,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %istore16_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -168,8 +184,9 @@ block0(v0: i32, v1: i64):
return
}
; check: strvh %r2, 0(%r3)
; nextln: br %r14
; block0:
; strvh %r2, 0(%r3)
; br %r14
function %istore16_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -179,8 +196,9 @@ block0(v0: i32):
return
}
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; br %r14
function %istore16_imm_i32(i64) {
block0(v0: i64):
@@ -189,8 +207,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 14640
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 14640
; br %r14
function %store_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -198,8 +217,9 @@ block0(v0: i16, v1: i64):
return
}
; check: strvh %r2, 0(%r3)
; nextln: br %r14
; block0:
; strvh %r2, 0(%r3)
; br %r14
function %store_i16_sym(i16) {
gv0 = symbol colocated %sym
@@ -209,8 +229,9 @@ block0(v0: i16):
return
}
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; nextln: br %r14
; block0:
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
; br %r14
function %store_imm_i16(i64) {
block0(v0: i64):
@@ -219,8 +240,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 14640
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 14640
; br %r14
function %istore8_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -228,8 +250,9 @@ block0(v0: i16, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i16(i64) {
block0(v0: i64):
@@ -238,8 +261,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %store_i8(i8, i64) {
block0(v0: i8, v1: i64):
@@ -247,8 +271,9 @@ block0(v0: i8, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %store_i8_off(i8, i64) {
block0(v0: i8, v1: i64):
@@ -256,8 +281,9 @@ block0(v0: i8, v1: i64):
return
}
; check: stcy %r2, 4096(%r3)
; nextln: br %r14
; block0:
; stcy %r2, 4096(%r3)
; br %r14
function %store_imm_i8(i64) {
block0(v0: i64):
@@ -266,8 +292,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %store_imm_i8_off(i64) {
block0(v0: i64):
@@ -276,6 +303,7 @@ block0(v0: i64):
return
}
; check: mviy 4096(%r2), 123
; nextln: br %r14
; block0:
; mviy 4096(%r2), 123
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
function %store_i64(i64, i64) {
@@ -7,8 +7,9 @@ block0(v0: i64, v1: i64):
return
}
; check: stg %r2, 0(%r3)
; nextln: br %r14
; block0:
; stg %r2, 0(%r3)
; br %r14
function %store_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -18,8 +19,9 @@ block0(v0: i64):
return
}
; check: stgrl %r2, %sym + 0
; nextln: br %r14
; block0:
; stgrl %r2, %sym + 0
; br %r14
function %store_imm_i64(i64) {
block0(v0: i64):
@@ -28,8 +30,9 @@ block0(v0: i64):
return
}
; check: mvghi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvghi 0(%r2), 12345
; br %r14
function %istore8_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -37,8 +40,9 @@ block0(v0: i64, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i64(i64) {
block0(v0: i64):
@@ -47,8 +51,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %istore16_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -56,8 +61,9 @@ block0(v0: i64, v1: i64):
return
}
; check: sth %r2, 0(%r3)
; nextln: br %r14
; block0:
; sth %r2, 0(%r3)
; br %r14
function %istore16_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -67,8 +73,9 @@ block0(v0: i64):
return
}
; check: sthrl %r2, %sym + 0
; nextln: br %r14
; block0:
; sthrl %r2, %sym + 0
; br %r14
function %istore16_imm_i64(i64) {
block0(v0: i64):
@@ -77,8 +84,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 12345
; br %r14
function %istore32_i64(i64, i64) {
block0(v0: i64, v1: i64):
@@ -86,8 +94,9 @@ block0(v0: i64, v1: i64):
return
}
; check: st %r2, 0(%r3)
; nextln: br %r14
; block0:
; st %r2, 0(%r3)
; br %r14
function %istore32_i64_sym(i64) {
gv0 = symbol colocated %sym
@@ -97,8 +106,9 @@ block0(v0: i64):
return
}
; check: strl %r2, %sym + 0
; nextln: br %r14
; block0:
; strl %r2, %sym + 0
; br %r14
function %istore32_imm_i64(i64) {
block0(v0: i64):
@@ -107,8 +117,9 @@ block0(v0: i64):
return
}
; check: mvhi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvhi 0(%r2), 12345
; br %r14
function %store_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -116,8 +127,9 @@ block0(v0: i32, v1: i64):
return
}
; check: st %r2, 0(%r3)
; nextln: br %r14
; block0:
; st %r2, 0(%r3)
; br %r14
function %store_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -127,8 +139,9 @@ block0(v0: i32):
return
}
; check: strl %r2, %sym + 0
; nextln: br %r14
; block0:
; strl %r2, %sym + 0
; br %r14
function %store_i32_off(i32, i64) {
block0(v0: i32, v1: i64):
@@ -136,8 +149,9 @@ block0(v0: i32, v1: i64):
return
}
; check: sty %r2, 4096(%r3)
; nextln: br %r14
; block0:
; sty %r2, 4096(%r3)
; br %r14
function %store_imm_i32(i64) {
block0(v0: i64):
@@ -146,8 +160,9 @@ block0(v0: i64):
return
}
; check: mvhi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvhi 0(%r2), 12345
; br %r14
function %istore8_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -155,8 +170,9 @@ block0(v0: i32, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i32(i64) {
block0(v0: i64):
@@ -165,8 +181,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %istore16_i32(i32, i64) {
block0(v0: i32, v1: i64):
@@ -174,8 +191,9 @@ block0(v0: i32, v1: i64):
return
}
; check: sth %r2, 0(%r3)
; nextln: br %r14
; block0:
; sth %r2, 0(%r3)
; br %r14
function %istore16_i32_sym(i32) {
gv0 = symbol colocated %sym
@@ -185,8 +203,9 @@ block0(v0: i32):
return
}
; check: sthrl %r2, %sym + 0
; nextln: br %r14
; block0:
; sthrl %r2, %sym + 0
; br %r14
function %istore16_imm_i32(i64) {
block0(v0: i64):
@@ -195,8 +214,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 12345
; br %r14
function %store_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -204,8 +224,9 @@ block0(v0: i16, v1: i64):
return
}
; check: sth %r2, 0(%r3)
; nextln: br %r14
; block0:
; sth %r2, 0(%r3)
; br %r14
function %store_i16_sym(i16) {
gv0 = symbol colocated %sym
@@ -215,8 +236,9 @@ block0(v0: i16):
return
}
; check: sthrl %r2, %sym + 0
; nextln: br %r14
; block0:
; sthrl %r2, %sym + 0
; br %r14
function %store_i16_off(i16, i64) {
block0(v0: i16, v1: i64):
@@ -224,8 +246,9 @@ block0(v0: i16, v1: i64):
return
}
; check: sthy %r2, 4096(%r3)
; nextln: br %r14
; block0:
; sthy %r2, 4096(%r3)
; br %r14
function %store_imm_i16(i64) {
block0(v0: i64):
@@ -234,8 +257,9 @@ block0(v0: i64):
return
}
; check: mvhhi 0(%r2), 12345
; nextln: br %r14
; block0:
; mvhhi 0(%r2), 12345
; br %r14
function %istore8_i16(i16, i64) {
block0(v0: i16, v1: i64):
@@ -243,8 +267,9 @@ block0(v0: i16, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %istore8_imm_i16(i64) {
block0(v0: i64):
@@ -253,8 +278,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %store_i8(i8, i64) {
block0(v0: i8, v1: i64):
@@ -262,8 +288,9 @@ block0(v0: i8, v1: i64):
return
}
; check: stc %r2, 0(%r3)
; nextln: br %r14
; block0:
; stc %r2, 0(%r3)
; br %r14
function %store_i8_off(i8, i64) {
block0(v0: i8, v1: i64):
@@ -271,8 +298,9 @@ block0(v0: i8, v1: i64):
return
}
; check: stcy %r2, 4096(%r3)
; nextln: br %r14
; block0:
; stcy %r2, 4096(%r3)
; br %r14
function %store_imm_i8(i64) {
block0(v0: i64):
@@ -281,8 +309,9 @@ block0(v0: i64):
return
}
; check: mvi 0(%r2), 123
; nextln: br %r14
; block0:
; mvi 0(%r2), 123
; br %r14
function %store_imm_i8_off(i64) {
block0(v0: i64):
@@ -291,6 +320,7 @@ block0(v0: i64):
return
}
; check: mviy 4096(%r2), 123
; nextln: br %r14
; block0:
; mviy 4096(%r2), 123
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -13,8 +13,9 @@ block0:
return v0
}
; check: bras %r1, 12 ; data %my_global + 0 ; lg %r2, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 12 ; data %my_global + 0 ; lg %r2, 0(%r1)
; br %r14
function %symbol_value_colocated() -> i64 {
gv0 = symbol colocated %my_global_colo
@@ -24,12 +25,9 @@ block0:
return v0
}
; check: larl %r2, %my_global_colo + 0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FUNC_ADDR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; larl %r2, %my_global_colo + 0
; br %r14
function %func_addr() -> i64 {
fn0 = %my_func(i64) -> i64
@@ -39,8 +37,9 @@ block0:
return v0
}
; check: bras %r1, 12 ; data %my_func + 0 ; lg %r2, 0(%r1)
; nextln: br %r14
; block0:
; bras %r1, 12 ; data %my_func + 0 ; lg %r2, 0(%r1)
; br %r14
function %func_addr_colocated() -> i64 {
fn0 = colocated %my_func_colo(i64) -> i64
@@ -50,5 +49,7 @@ block0:
return v0
}
; check: larl %r2, %my_func_colo + 0
; nextln: br %r14
; block0:
; larl %r2, %my_func_colo + 0
; br %r14

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -10,18 +10,16 @@ block0:
trap user0
}
; check: trap
; block0:
; trap
function %resumable_trap() {
block0:
trap user0
}
; check: trap
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TRAPZ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; trap
function %trapz(i64) {
block0(v0: i64):
@@ -31,18 +29,13 @@ block0(v0: i64):
return
}
; FIXME: Does not use TrapIf internally as trapz is expanded.
; check: Block 0
; check: clgfi %r2, 42
; nextln: jge label1 ; jg label2
; check: Block 1:
; check: br %r14
; check: Block 2:
; check: trap
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TRAPNZ/RESUMABLE_TRAPNZ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; clgfi %r2, 42
; jge label1 ; jg label2
; block1:
; br %r14
; block2:
; trap
function %trapnz(i64) {
block0(v0: i64):
@@ -52,14 +45,13 @@ block0(v0: i64):
return
}
; FIXME: Does not use TrapIf internally as trapnz is expanded.
; check: Block 0
; check: clgfi %r2, 42
; nextln: jgne label1 ; jg label2
; check: Block 1:
; check: br %r14
; check: Block 2:
; check: trap
; block0:
; clgfi %r2, 42
; jgne label1 ; jg label2
; block1:
; br %r14
; block2:
; trap
function %resumable_trapnz(i64) {
block0(v0: i64):
@@ -69,18 +61,13 @@ block0(v0: i64):
return
}
; FIXME: Does not use TrapIf internally as resumable_trapnz is expanded.
; check: Block 0
; check: clgfi %r2, 42
; nextln: jgne label1 ; jg label2
; check: Block 1:
; check: br %r14
; check: Block 2:
; check: trap
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; DEBUGTRAP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; block0:
; clgfi %r2, 42
; jgne label1 ; jg label2
; block1:
; br %r14
; block2:
; trap
function %h() {
block0:
@@ -88,4 +75,7 @@ block0:
return
}
; check: debugtrap
; block0:
; debugtrap
; br %r14

View File

@@ -8,19 +8,13 @@ block0(v0: i64, v1: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 0(%rdi,%rsi,1), %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 0(%rdi,%rsi,1), %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %amode_add_imm(i64) -> i64 {
block0(v0: i64):
@@ -30,19 +24,13 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 42(%rdi), %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 42(%rdi), %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %amode_add_imm_order(i64) -> i64 {
block0(v0: i64):
@@ -52,19 +40,13 @@ block0(v0: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 42(%rdi), %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 42(%rdi), %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %amode_add_uext_imm(i64) -> i64 {
block0(v0: i64):
@@ -75,17 +57,11 @@ block0(v0: i64):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 42(%rdi), %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 42(%rdi), %rax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,21 +7,15 @@ block0(v0: b1, v1: i32, v2: i32):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: testb $1, %dil
; Inst 3: movl %edx, %edi
; Inst 4: cmovnzl %esi, %edi
; Inst 5: movq %rdi, %rax
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; testb $1, %dil
; cmovnzl %esi, %edx, %edx
; movq %rdx, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f1(b1) -> i32 {
block0(v0: b1):
@@ -35,32 +29,21 @@ block2:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: testb $1, %dil
; Inst 3: jnz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: movl $1, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $2, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; testb $1, %dil
; jnz label1; j label2
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f2(b1) -> i32 {
block0(v0: b1):
@@ -74,30 +57,19 @@ block2:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: testb $1, %dil
; Inst 3: jz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: movl $1, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $2, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; testb $1, %dil
; jz label1; j label2
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,17 +7,12 @@ block0(v0: i32, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: addl %esi, %edi
; Inst 3: movq %rdi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; addl %edi, %esi, %edi
; movq %rdi, %rax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,17 +7,11 @@ block0(v0: b8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movsbq %dil, %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movsbq %dil, %rax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -16,32 +16,21 @@ block2:
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpl %esi, %edi
; Inst 3: jz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: movl $1, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $2, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; cmpl %esi, %edi
; jz label1; j label2
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f1(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -58,32 +47,21 @@ block2:
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpl %esi, %edi
; Inst 3: jnz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: movl $1, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $2, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; cmpl %esi, %edi
; jnz label1; j label2
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f2(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
@@ -100,32 +78,21 @@ block2:
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpl %esi, %edi
; Inst 3: jz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: movl $1, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $2, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; cmpl %esi, %edi
; jz label1; j label2
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f3(f32, f32) -> i32 {
block0(v0: f32, v1: f32):
@@ -142,31 +109,20 @@ block2:
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 2)
; (successor: Block 1)
; (instruction range: 0 .. 5)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: ucomiss %xmm1, %xmm0
; Inst 3: jp label2
; Inst 4: jnz label2; j label1
; Block 1:
; (original IR block: block1)
; (instruction range: 5 .. 9)
; Inst 5: movl $1, %eax
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 9 .. 13)
; Inst 9: movl $2, %eax
; Inst 10: movq %rbp, %rsp
; Inst 11: popq %rbp
; Inst 12: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; ucomiss %xmm1, %xmm0
; jp label2
; jnz label2; j label1
; block1:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $2, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -9,23 +9,19 @@ block0(v0: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $32, %rsp
; Inst 3: virtual_sp_offset_adjust 32
; Inst 4: movq %rdi, %rcx
; Inst 5: call *%rdi
; Inst 6: addq $32, %rsp
; Inst 7: virtual_sp_offset_adjust -32
; Inst 8: movq %rbp, %rsp
; Inst 9: popq %rbp
; Inst 10: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; subq %rsp, $32, %rsp
; virtual_sp_offset_adjust 32
; movq %rdi, %rcx
; movq %rcx, %rdi
; call *%rdi
; addq %rsp, $32, %rsp
; virtual_sp_offset_adjust -32
; movq %rbp, %rsp
; popq %rbp
; ret
function %two_args(i32, f32) system_v {
;; system_v has params in %rdi, %xmm0, fascall in %rcx, %xmm1
@@ -37,29 +33,26 @@ block0(v0: i32, v1: f32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 17)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rsi
; Inst 3: movaps %xmm0, %xmm6
; Inst 4: subq $32, %rsp
; Inst 5: virtual_sp_offset_adjust 32
; Inst 6: movq %rsi, %rcx
; Inst 7: movaps %xmm6, %xmm1
; Inst 8: call *%rsi
; Inst 9: addq $32, %rsp
; Inst 10: virtual_sp_offset_adjust -32
; Inst 11: movq %rsi, %rdi
; Inst 12: movaps %xmm6, %xmm0
; Inst 13: call *%rsi
; Inst 14: movq %rbp, %rsp
; Inst 15: popq %rbp
; Inst 16: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rax
; movdqa %xmm0, %xmm6
; subq %rsp, $32, %rsp
; virtual_sp_offset_adjust 32
; movq %rax, %rcx
; movdqa %xmm6, %xmm1
; movq %rax, %rdi
; movdqa %xmm1, %xmm6
; call *%rdi
; addq %rsp, $32, %rsp
; virtual_sp_offset_adjust -32
; movq %rdi, %rax
; movdqa %xmm6, %xmm0
; call *%rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %fastcall_to_systemv(i32) windows_fastcall {
;; fastcall preserves xmm6+, rbx, rbp, rdi, rsi, r12-r15
@@ -70,44 +63,39 @@ block0(v0: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 32)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $176, %rsp
; Inst 3: movdqu %xmm6, 0(%rsp)
; Inst 4: movdqu %xmm7, 16(%rsp)
; Inst 5: movdqu %xmm8, 32(%rsp)
; Inst 6: movdqu %xmm9, 48(%rsp)
; Inst 7: movdqu %xmm10, 64(%rsp)
; Inst 8: movdqu %xmm11, 80(%rsp)
; Inst 9: movdqu %xmm12, 96(%rsp)
; Inst 10: movdqu %xmm13, 112(%rsp)
; Inst 11: movdqu %xmm14, 128(%rsp)
; Inst 12: movdqu %xmm15, 144(%rsp)
; Inst 13: movq %rsi, 160(%rsp)
; Inst 14: movq %rdi, 168(%rsp)
; Inst 15: call *%rcx
; Inst 16: movdqu 0(%rsp), %xmm6
; Inst 17: movdqu 16(%rsp), %xmm7
; Inst 18: movdqu 32(%rsp), %xmm8
; Inst 19: movdqu 48(%rsp), %xmm9
; Inst 20: movdqu 64(%rsp), %xmm10
; Inst 21: movdqu 80(%rsp), %xmm11
; Inst 22: movdqu 96(%rsp), %xmm12
; Inst 23: movdqu 112(%rsp), %xmm13
; Inst 24: movdqu 128(%rsp), %xmm14
; Inst 25: movdqu 144(%rsp), %xmm15
; Inst 26: movq 160(%rsp), %rsi
; Inst 27: movq 168(%rsp), %rdi
; Inst 28: addq $176, %rsp
; Inst 29: movq %rbp, %rsp
; Inst 30: popq %rbp
; Inst 31: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $176, %rsp
; movq %rsi, 0(%rsp)
; movq %rdi, 8(%rsp)
; movdqu %xmm6, 16(%rsp)
; movdqu %xmm7, 32(%rsp)
; movdqu %xmm8, 48(%rsp)
; movdqu %xmm9, 64(%rsp)
; movdqu %xmm10, 80(%rsp)
; movdqu %xmm11, 96(%rsp)
; movdqu %xmm12, 112(%rsp)
; movdqu %xmm13, 128(%rsp)
; movdqu %xmm14, 144(%rsp)
; movdqu %xmm15, 160(%rsp)
; block0:
; call *%rcx
; movq 0(%rsp), %rsi
; movq 8(%rsp), %rdi
; movdqu 16(%rsp), %xmm6
; movdqu 32(%rsp), %xmm7
; movdqu 48(%rsp), %xmm8
; movdqu 64(%rsp), %xmm9
; movdqu 80(%rsp), %xmm10
; movdqu 96(%rsp), %xmm11
; movdqu 112(%rsp), %xmm12
; movdqu 128(%rsp), %xmm13
; movdqu 144(%rsp), %xmm14
; movdqu 160(%rsp), %xmm15
; addq %rsp, $176, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %many_args(
;; rdi, rsi, rdx, rcx, r8, r9,
@@ -139,56 +127,58 @@ block0(
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 44)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $32, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %r13, 8(%rsp)
; Inst 5: movq %r14, 16(%rsp)
; Inst 6: movq %rdx, %rax
; Inst 7: movq %rcx, %r10
; Inst 8: movq %r8, %r11
; Inst 9: movq %r9, %r12
; Inst 10: movq 16(%rbp), %r13
; Inst 11: movq 24(%rbp), %r14
; Inst 12: movss 32(%rbp), %xmm8
; Inst 13: movsd 40(%rbp), %xmm9
; Inst 14: subq $144, %rsp
; Inst 15: virtual_sp_offset_adjust 144
; Inst 16: movq %rdi, %rcx
; Inst 17: movq %rsi, %rdx
; Inst 18: movq %rax, %r8
; Inst 19: movq %r10, %r9
; Inst 20: movq %r11, 32(%rsp)
; Inst 21: movq %r12, 40(%rsp)
; Inst 22: movsd %xmm0, 48(%rsp)
; Inst 23: movsd %xmm1, 56(%rsp)
; Inst 24: movsd %xmm2, 64(%rsp)
; Inst 25: movsd %xmm3, 72(%rsp)
; Inst 26: movsd %xmm4, 80(%rsp)
; Inst 27: movsd %xmm5, 88(%rsp)
; Inst 28: movsd %xmm6, 96(%rsp)
; Inst 29: movsd %xmm7, 104(%rsp)
; Inst 30: movq %r13, 112(%rsp)
; Inst 31: movl %r14d, 120(%rsp)
; Inst 32: movss %xmm8, 128(%rsp)
; Inst 33: movsd %xmm9, 136(%rsp)
; Inst 34: call *%rdi
; Inst 35: addq $144, %rsp
; Inst 36: virtual_sp_offset_adjust -144
; Inst 37: movq 0(%rsp), %r12
; Inst 38: movq 8(%rsp), %r13
; Inst 39: movq 16(%rsp), %r14
; Inst 40: addq $32, %rsp
; Inst 41: movq %rbp, %rsp
; Inst 42: popq %rbp
; Inst 43: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $96, %rsp
; movq %rbx, 48(%rsp)
; movq %r12, 56(%rsp)
; movq %r13, 64(%rsp)
; movq %r14, 72(%rsp)
; movq %r15, 80(%rsp)
; block0:
; movq %rsi, %rbx
; movq %rdx, %r14
; movq %rcx, %r12
; movq %r8, %r13
; movq %r9, %r15
; movq 16(%rbp), %rax
; movq 24(%rbp), %r11
; movss 32(%rbp), %xmm9
; movsd 40(%rbp), %xmm8
; subq %rsp, $144, %rsp
; virtual_sp_offset_adjust 144
; movq %rdi, %rcx
; movq %rbx, %rdx
; movq %r14, %r8
; movq %r12, %r9
; movq %r13, %rsi
; movq %rsi, 32(%rsp)
; movq %r15, %rsi
; movq %rsi, 40(%rsp)
; movsd %xmm0, 48(%rsp)
; movsd %xmm1, 56(%rsp)
; movsd %xmm2, 64(%rsp)
; movsd %xmm3, 72(%rsp)
; movsd %xmm4, 80(%rsp)
; movsd %xmm5, 88(%rsp)
; movsd %xmm6, 96(%rsp)
; movsd %xmm7, 104(%rsp)
; movq %rax, 112(%rsp)
; movl %r11d, 120(%rsp)
; movss %xmm9, 128(%rsp)
; movsd %xmm8, 136(%rsp)
; call *%rdi
; addq %rsp, $144, %rsp
; virtual_sp_offset_adjust -144
; movq 48(%rsp), %rbx
; movq 56(%rsp), %r12
; movq 64(%rsp), %r13
; movq 72(%rsp), %r14
; movq 80(%rsp), %r15
; addq %rsp, $96, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %many_ints(i64, i64, i64, i64, i64) system_v {
;; rdi => rcx
@@ -202,29 +192,31 @@ block0(v0: i64, v1:i64, v2:i64, v3:i64, v4:i64):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 17)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdx, %rax
; Inst 3: movq %rcx, %r9
; Inst 4: movq %r8, %r10
; Inst 5: subq $48, %rsp
; Inst 6: virtual_sp_offset_adjust 48
; Inst 7: movq %rdi, %rcx
; Inst 8: movq %rsi, %rdx
; Inst 9: movq %rax, %r8
; Inst 10: movq %r10, 32(%rsp)
; Inst 11: call *%rdi
; Inst 12: addq $48, %rsp
; Inst 13: virtual_sp_offset_adjust -48
; Inst 14: movq %rbp, %rsp
; Inst 15: popq %rbp
; Inst 16: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp)
; block0:
; movq %rsi, %r11
; movq %rdx, %r9
; movq %rcx, %rax
; movq %r8, %rbx
; subq %rsp, $48, %rsp
; virtual_sp_offset_adjust 48
; movq %rdi, %rcx
; movq %r11, %rdx
; movq %r9, %r8
; movq %rax, %r9
; movq %rbx, %r11
; movq %r11, 32(%rsp)
; call *%rdi
; addq %rsp, $48, %rsp
; virtual_sp_offset_adjust -48
; movq 0(%rsp), %rbx
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %many_args2(i32, f32, i64, f64, i32, i32, i32, f32, f64, f32, f64) system_v {
sig0 = (i32, f32, i64, f64, i32, i32, i32, f32, f64, f32, f64) windows_fastcall
@@ -233,37 +225,37 @@ block0(v0: i32, v1: f32, v2: i64, v3: f64, v4: i32, v5: i32, v6: i32, v7: f32, v
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 25)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movaps %xmm1, %xmm6
; Inst 3: movq %rcx, %rax
; Inst 4: movq %r8, %r9
; Inst 5: movaps %xmm3, %xmm7
; Inst 6: subq $96, %rsp
; Inst 7: virtual_sp_offset_adjust 96
; Inst 8: movq %rdi, %rcx
; Inst 9: movaps %xmm0, %xmm1
; Inst 10: movq %rsi, %r8
; Inst 11: movaps %xmm6, %xmm3
; Inst 12: movl %edx, 32(%rsp)
; Inst 13: movl %eax, 40(%rsp)
; Inst 14: movl %r9d, 48(%rsp)
; Inst 15: movss %xmm2, 56(%rsp)
; Inst 16: movsd %xmm7, 64(%rsp)
; Inst 17: movss %xmm4, 72(%rsp)
; Inst 18: movsd %xmm5, 80(%rsp)
; Inst 19: call *%rdi
; Inst 20: addq $96, %rsp
; Inst 21: virtual_sp_offset_adjust -96
; Inst 22: movq %rbp, %rsp
; Inst 23: popq %rbp
; Inst 24: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm6
; movq %rsi, %rax
; movdqa %xmm1, %xmm14
; movq %rcx, %r11
; movq %r8, %r9
; movdqa %xmm3, %xmm10
; subq %rsp, $96, %rsp
; virtual_sp_offset_adjust 96
; movq %rdi, %rcx
; movdqa %xmm6, %xmm1
; movq %rax, %r8
; movdqa %xmm14, %xmm3
; movl %edx, 32(%rsp)
; movq %r11, %rdx
; movl %edx, 40(%rsp)
; movq %r9, %rax
; movl %eax, 48(%rsp)
; movss %xmm2, 56(%rsp)
; movdqa %xmm10, %xmm2
; movsd %xmm2, 64(%rsp)
; movss %xmm4, 72(%rsp)
; movsd %xmm5, 80(%rsp)
; call *%rdi
; addq %rsp, $96, %rsp
; virtual_sp_offset_adjust -96
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix1(i32) wasmtime_system_v {
sig0 = (i32) system_v
@@ -272,20 +264,14 @@ block0(v0: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rsi
; Inst 3: movq %rsi, %rdi
; Inst 4: call *%rsi
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rcx
; call *%rcx
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix2(i32) system_v {
sig0 = (i32) wasmtime_system_v
@@ -294,20 +280,14 @@ block0(v0: i32):
return
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rsi
; Inst 3: movq %rsi, %rdi
; Inst 4: call *%rsi
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rcx
; call *%rcx
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix2() -> i32, i32 system_v {
sig0 = () -> i32, i32 wasmtime_system_v
@@ -317,26 +297,20 @@ block0:
return v0, v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 14)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl $1, %esi
; Inst 3: subq $16, %rsp
; Inst 4: virtual_sp_offset_adjust 16
; Inst 5: lea 0(%rsp), %rdi
; Inst 6: call *%rsi
; Inst 7: movq 0(%rsp), %rsi
; Inst 8: addq $16, %rsp
; Inst 9: virtual_sp_offset_adjust -16
; Inst 10: movq %rsi, %rdx
; Inst 11: movq %rbp, %rsp
; Inst 12: popq %rbp
; Inst 13: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl $1, %edx
; subq %rsp, $16, %rsp
; virtual_sp_offset_adjust 16
; lea 0(%rsp), %rdi
; call *%rdx
; movq 0(%rsp), %rdx
; addq %rsp, $16, %rsp
; virtual_sp_offset_adjust -16
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix3() -> i32, i32 wasmtime_system_v {
sig0 = () -> i32, i32 system_v
@@ -346,25 +320,21 @@ block0:
return v0, v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %rdi, %r12
; Inst 5: movl $1, %esi
; Inst 6: call *%rsi
; Inst 7: movl %edx, 0(%r12)
; Inst 8: movq 0(%rsp), %r12
; Inst 9: addq $16, %rsp
; Inst 10: movq %rbp, %rsp
; Inst 11: popq %rbp
; Inst 12: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %r13, 0(%rsp)
; block0:
; movq %rdi, %r13
; movl $1, %r9d
; call *%r9
; movq %r13, %rdi
; movl %edx, 0(%rdi)
; movq 0(%rsp), %r13
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix4() -> i32, i64, i32 wasmtime_system_v {
sig0 = () -> i32, i64, i32 system_v
@@ -374,32 +344,28 @@ block0:
return v0, v1, v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 20)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %rdi, %r12
; Inst 5: movl $1, %esi
; Inst 6: subq $16, %rsp
; Inst 7: virtual_sp_offset_adjust 16
; Inst 8: lea 0(%rsp), %rdi
; Inst 9: call *%rsi
; Inst 10: movq 0(%rsp), %rsi
; Inst 11: addq $16, %rsp
; Inst 12: virtual_sp_offset_adjust -16
; Inst 13: movq %rdx, 0(%r12)
; Inst 14: movl %esi, 8(%r12)
; Inst 15: movq 0(%rsp), %r12
; Inst 16: addq $16, %rsp
; Inst 17: movq %rbp, %rsp
; Inst 18: popq %rbp
; Inst 19: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp)
; block0:
; movq %rdi, %rbx
; movl $1, %esi
; subq %rsp, $16, %rsp
; virtual_sp_offset_adjust 16
; lea 0(%rsp), %rdi
; call *%rsi
; movq 0(%rsp), %rcx
; addq %rsp, $16, %rsp
; virtual_sp_offset_adjust -16
; movq %rbx, %rdi
; movq %rdx, 0(%rdi)
; movl %ecx, 8(%rdi)
; movq 0(%rsp), %rbx
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix5() -> f32, i64, i32, f32 wasmtime_system_v {
sig0 = () -> f32, i64, i32, f32 system_v
@@ -409,27 +375,23 @@ block0:
return v0, v1, v2, v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 15)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %rdi, %r12
; Inst 5: movl $1, %esi
; Inst 6: call *%rsi
; Inst 7: movq %rax, 0(%r12)
; Inst 8: movl %edx, 8(%r12)
; Inst 9: movss %xmm1, 12(%r12)
; Inst 10: movq 0(%rsp), %r12
; Inst 11: addq $16, %rsp
; Inst 12: movq %rbp, %rsp
; Inst 13: popq %rbp
; Inst 14: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %r12, 0(%rsp)
; block0:
; movq %rdi, %r12
; movl $1, %eax
; call *%rax
; movq %r12, %rdi
; movq %rax, 0(%rdi)
; movl %edx, 8(%rdi)
; movss %xmm1, 12(%rdi)
; movq 0(%rsp), %r12
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function %wasmtime_mix6(f32, i64, i32, f32) -> f32, i64, i32, f32 wasmtime_system_v {
sig0 = (f32, i64, i32, f32) -> f32, i64, i32, f32 system_v
@@ -439,25 +401,21 @@ block0(v0: f32, v1: i64, v2: i32, v3: f32):
return v5, v6, v7, v8
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 15)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %rdx, %r12
; Inst 5: movl $1, %eax
; Inst 6: call *%rax
; Inst 7: movq %rax, 0(%r12)
; Inst 8: movl %edx, 8(%r12)
; Inst 9: movss %xmm1, 12(%r12)
; Inst 10: movq 0(%rsp), %r12
; Inst 11: addq $16, %rsp
; Inst 12: movq %rbp, %rsp
; Inst 13: popq %rbp
; Inst 14: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp)
; block0:
; movq %rdx, %rbx
; movl $1, %eax
; call *%rax
; movq %rbx, %rcx
; movq %rax, 0(%rcx)
; movl %edx, 8(%rcx)
; movss %xmm1, 12(%rcx)
; movq 0(%rsp), %rbx
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,19 +7,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: lzcntq %rdi, %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; lzcntq %rdi, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %clz(i32) -> i32 {
block0(v0: i32):
@@ -27,17 +21,11 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: lzcntl %edi, %esi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; lzcntl %edi, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -10,25 +10,19 @@ block0(v0: i64, v1: i64):
return v4, v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 0(%rsi), %rax
; Inst 3: cmpq %rax, %rdi
; Inst 4: setz %cl
; Inst 5: andq $1, %rcx
; Inst 6: cmpq %rax, %rdi
; Inst 7: cmovzq %rdi, %rsi
; Inst 8: movq %rcx, %rax
; Inst 9: movq %rsi, %rdx
; Inst 10: movq %rbp, %rsp
; Inst 11: popq %rbp
; Inst 12: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 0(%rsi), %rcx
; cmpq %rcx, %rdi
; setz %al
; andq %rax, $1, %rax
; cmpq %rcx, %rdi
; cmovzq %rdi, %rsi, %rsi
; movq %rsi, %rdx
; movq %rbp, %rsp
; popq %rbp
; ret
function %f1(f64, i64) -> i64, f64 {
block0(v0: f64, v1: i64):
@@ -39,27 +33,20 @@ block0(v0: f64, v1: i64):
return v4, v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 17)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movsd 0(%rdi), %xmm1
; Inst 3: ucomisd %xmm1, %xmm0
; Inst 4: setnp %sil
; Inst 5: setz %dil
; Inst 6: andl %edi, %esi
; Inst 7: andq $1, %rsi
; Inst 8: ucomisd %xmm0, %xmm1
; Inst 9: movaps %xmm0, %xmm1
; Inst 10: jz $next; movsd %xmm0, %xmm1; $next:
; Inst 11: jnp $next; movsd %xmm0, %xmm1; $next:
; Inst 12: movq %rsi, %rax
; Inst 13: movaps %xmm1, %xmm0
; Inst 14: movq %rbp, %rsp
; Inst 15: popq %rbp
; Inst 16: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movsd 0(%rdi), %xmm12
; ucomisd %xmm12, %xmm0
; setnp %al
; setz %r8b
; andl %eax, %r8d, %eax
; andq %rax, $1, %rax
; ucomisd %xmm0, %xmm12
; movdqa %xmm0, %xmm6
; mov z, sd; j%xmm6 $next; mov%xmm0 %xmm0, %xmm0; $next:
; mov np, sd; j%xmm6 $next; mov%xmm0 %xmm0, %xmm0; $next:
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,19 +7,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: tzcntq %rdi, %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; tzcntq %rdi, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %ctz(i32) -> i32 {
block0(v0: i32):
@@ -27,17 +21,11 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: tzcntl %edi, %esi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; tzcntl %edi, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -12,8 +12,8 @@ block0(v0: i8, v1: i8):
v2 = srem.i8 v0, v1
; check: movq %rdi, %rax
; nextln: movl $$0, %edx
; nextln: srem $$rax:$$rdx, %sil
; nextln: shrq $$8, %rax
; nextln: srem_seq %al, %dl, %sil, %al, %dl, tmp=(none)
; nextln: shrq $$8, %rax, %rax
return v2
}
@@ -23,7 +23,7 @@ block0(v0: i16, v1: i16):
v2 = srem.i16 v0, v1
; check: movq %rdi, %rax
; nextln: movl $$0, %edx
; nextln: srem $$rax:$$rdx, %si
; nextln: srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none)
; nextln: movq %rdx, %rax
return v2
@@ -34,7 +34,7 @@ block0(v0: i32, v1: i32):
v2 = srem.i32 v0, v1
; check: movq %rdi, %rax
; nextln: movl $$0, %edx
; nextln: srem $$rax:$$rdx, %esi
; nextln: srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none)
; nextln: movq %rdx, %rax
return v2
@@ -45,7 +45,7 @@ block0(v0: i64, v1: i64):
v2 = srem.i64 v0, v1
; check: movq %rdi, %rax
; nextln: movl $$0, %edx
; nextln: srem $$rax:$$rdx, %rsi
; nextln: srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none)
; nextln: movq %rdx, %rax
return v2

View File

@@ -8,120 +8,90 @@ block0(v0: i64, v1: i64, v2: i64, v3: i64):
return v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movq %rcx, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq %rcx, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f1(i64, i64, i64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: i64, v3: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movq %rdx, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq %rdx, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f2(i64, i64, i64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: i64, v3: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movq %r8, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq %r8, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f3(i64, i64, i64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: i64, v3: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movq %r9, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq %r9, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f4(i64, i64, f64, i64) -> f64 windows_fastcall {
block0(v0: i64, v1: i64, v2: f64, v3: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movaps %xmm2, %xmm0
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movdqa %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %f5(i64, i64, f64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: f64, v3: i64):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; Inst 4: movq %r9, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq %r9, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f6(i64, i64, i64, i64, i64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64):
@@ -138,59 +108,33 @@ block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64):
;; TODO(#2704): fix regalloc's register priority ordering!
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 15)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
; Inst 4: subq $16, %rsp
; Inst 5: movq %rsi, 0(%rsp)
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
; Inst 7: movq 48(%rbp), %rsi
; Inst 8: movq 56(%rbp), %rsi
; Inst 9: movq %rsi, %rax
; Inst 10: movq 0(%rsp), %rsi
; Inst 11: addq $16, %rsp
; Inst 12: movq %rbp, %rsp
; Inst 13: popq %rbp
; Inst 14: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq 48(%rbp), %r11
; movq 56(%rbp), %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %f7(i128, i64, i128, i128) -> i128 windows_fastcall {
block0(v0: i128, v1: i64, v2: i128, v3: i128):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 20)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
; Inst 4: subq $16, %rsp
; Inst 5: movq %rsi, 0(%rsp)
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
; Inst 7: movq %rdi, 8(%rsp)
; Inst 8: unwind SaveReg { clobber_offset: 8, reg: r17J }
; Inst 9: movq 48(%rbp), %rsi
; Inst 10: movq 56(%rbp), %rsi
; Inst 11: movq 64(%rbp), %rdi
; Inst 12: movq %rsi, %rax
; Inst 13: movq %rdi, %rdx
; Inst 14: movq 0(%rsp), %rsi
; Inst 15: movq 8(%rsp), %rdi
; Inst 16: addq $16, %rsp
; Inst 17: movq %rbp, %rsp
; Inst 18: popq %rbp
; Inst 19: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; movq 48(%rbp), %r11
; movq 56(%rbp), %rax
; movq 64(%rbp), %rdx
; movq %rbp, %rsp
; popq %rbp
; ret
function %f8(i64) -> i64 windows_fastcall {
sig0 = (i64, i64, f64, f64, i64, i64) -> i64 windows_fastcall
@@ -202,37 +146,26 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 25)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
; Inst 4: subq $16, %rsp
; Inst 5: movq %rsi, 0(%rsp)
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
; Inst 7: movq %rcx, %rsi
; Inst 8: cvtsi2sd %rsi, %xmm3
; Inst 9: subq $48, %rsp
; Inst 10: virtual_sp_offset_adjust 48
; Inst 11: movq %rsi, %rcx
; Inst 12: movq %rsi, %rdx
; Inst 13: movaps %xmm3, %xmm2
; Inst 14: movq %rsi, 32(%rsp)
; Inst 15: movq %rsi, 40(%rsp)
; Inst 16: load_ext_name %g+0, %rsi
; Inst 17: call *%rsi
; Inst 18: addq $48, %rsp
; Inst 19: virtual_sp_offset_adjust -48
; Inst 20: movq 0(%rsp), %rsi
; Inst 21: addq $16, %rsp
; Inst 22: movq %rbp, %rsp
; Inst 23: popq %rbp
; Inst 24: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
; block0:
; cvtsi2sd %rcx, %xmm2
; subq %rsp, $48, %rsp
; virtual_sp_offset_adjust 48
; movq %rcx, %rdx
; movq %rdx, %r8
; movdqa %xmm2, %xmm3
; movq %r8, 32(%rsp)
; movq %r8, 40(%rsp)
; load_ext_name %g+0, %r9
; call *%r9
; addq %rsp, $48, %rsp
; virtual_sp_offset_adjust -48
; movq %rbp, %rsp
; popq %rbp
; ret
function %f9(i64) -> f64 windows_fastcall {
block0(v0: i64):
@@ -284,95 +217,91 @@ block0(v0: i64):
return v39
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 85)
; Inst 0: pushq %rbp
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; Inst 2: movq %rsp, %rbp
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 160 }
; Inst 4: subq $224, %rsp
; Inst 5: movdqu %xmm6, 64(%rsp)
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r6V }
; Inst 7: movdqu %xmm7, 80(%rsp)
; Inst 8: unwind SaveReg { clobber_offset: 16, reg: r7V }
; Inst 9: movdqu %xmm8, 96(%rsp)
; Inst 10: unwind SaveReg { clobber_offset: 32, reg: r8V }
; Inst 11: movdqu %xmm9, 112(%rsp)
; Inst 12: unwind SaveReg { clobber_offset: 48, reg: r9V }
; Inst 13: movdqu %xmm10, 128(%rsp)
; Inst 14: unwind SaveReg { clobber_offset: 64, reg: r10V }
; Inst 15: movdqu %xmm11, 144(%rsp)
; Inst 16: unwind SaveReg { clobber_offset: 80, reg: r11V }
; Inst 17: movdqu %xmm12, 160(%rsp)
; Inst 18: unwind SaveReg { clobber_offset: 96, reg: r12V }
; Inst 19: movdqu %xmm13, 176(%rsp)
; Inst 20: unwind SaveReg { clobber_offset: 112, reg: r13V }
; Inst 21: movdqu %xmm14, 192(%rsp)
; Inst 22: unwind SaveReg { clobber_offset: 128, reg: r14V }
; Inst 23: movdqu %xmm15, 208(%rsp)
; Inst 24: unwind SaveReg { clobber_offset: 144, reg: r15V }
; Inst 25: movsd 0(%rcx), %xmm0
; Inst 26: movdqu %xmm0, rsp(48 + virtual offset)
; Inst 27: movsd 8(%rcx), %xmm1
; Inst 28: movsd 16(%rcx), %xmm0
; Inst 29: movdqu %xmm0, rsp(32 + virtual offset)
; Inst 30: movsd 24(%rcx), %xmm3
; Inst 31: movsd 32(%rcx), %xmm4
; Inst 32: movsd 40(%rcx), %xmm5
; Inst 33: movsd 48(%rcx), %xmm6
; Inst 34: movsd 56(%rcx), %xmm7
; Inst 35: movsd 64(%rcx), %xmm8
; Inst 36: movsd 72(%rcx), %xmm9
; Inst 37: movsd 80(%rcx), %xmm10
; Inst 38: movsd 88(%rcx), %xmm11
; Inst 39: movsd 96(%rcx), %xmm12
; Inst 40: movsd 104(%rcx), %xmm13
; Inst 41: movsd 112(%rcx), %xmm14
; Inst 42: movsd 120(%rcx), %xmm15
; Inst 43: movsd 128(%rcx), %xmm2
; Inst 44: movdqu %xmm2, rsp(0 + virtual offset)
; Inst 45: movsd 136(%rcx), %xmm2
; Inst 46: movsd 144(%rcx), %xmm0
; Inst 47: movdqu %xmm0, rsp(16 + virtual offset)
; Inst 48: movdqu rsp(48 + virtual offset), %xmm0
; Inst 49: addsd %xmm1, %xmm0
; Inst 50: movdqu rsp(32 + virtual offset), %xmm1
; Inst 51: addsd %xmm3, %xmm1
; Inst 52: addsd %xmm5, %xmm4
; Inst 53: addsd %xmm7, %xmm6
; Inst 54: addsd %xmm9, %xmm8
; Inst 55: addsd %xmm11, %xmm10
; Inst 56: addsd %xmm13, %xmm12
; Inst 57: addsd %xmm15, %xmm14
; Inst 58: movdqu rsp(0 + virtual offset), %xmm3
; Inst 59: addsd %xmm2, %xmm3
; Inst 60: movdqu rsp(16 + virtual offset), %xmm2
; Inst 61: addsd 152(%rcx), %xmm2
; Inst 62: addsd %xmm1, %xmm0
; Inst 63: addsd %xmm6, %xmm4
; Inst 64: addsd %xmm10, %xmm8
; Inst 65: addsd %xmm14, %xmm12
; Inst 66: addsd %xmm2, %xmm3
; Inst 67: addsd %xmm4, %xmm0
; Inst 68: addsd %xmm12, %xmm8
; Inst 69: addsd %xmm8, %xmm0
; Inst 70: addsd %xmm3, %xmm0
; Inst 71: movdqu 64(%rsp), %xmm6
; Inst 72: movdqu 80(%rsp), %xmm7
; Inst 73: movdqu 96(%rsp), %xmm8
; Inst 74: movdqu 112(%rsp), %xmm9
; Inst 75: movdqu 128(%rsp), %xmm10
; Inst 76: movdqu 144(%rsp), %xmm11
; Inst 77: movdqu 160(%rsp), %xmm12
; Inst 78: movdqu 176(%rsp), %xmm13
; Inst 79: movdqu 192(%rsp), %xmm14
; Inst 80: movdqu 208(%rsp), %xmm15
; Inst 81: addq $224, %rsp
; Inst 82: movq %rbp, %rsp
; Inst 83: popq %rbp
; Inst 84: ret
; }}
; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 144 }
; subq %rsp, $240, %rsp
; movdqu %xmm6, 96(%rsp)
; unwind SaveReg { clobber_offset: 0, reg: p6f }
; movdqu %xmm7, 112(%rsp)
; unwind SaveReg { clobber_offset: 16, reg: p7f }
; movdqu %xmm8, 128(%rsp)
; unwind SaveReg { clobber_offset: 32, reg: p8f }
; movdqu %xmm9, 144(%rsp)
; unwind SaveReg { clobber_offset: 48, reg: p9f }
; movdqu %xmm10, 160(%rsp)
; unwind SaveReg { clobber_offset: 64, reg: p10f }
; movdqu %xmm11, 176(%rsp)
; unwind SaveReg { clobber_offset: 80, reg: p11f }
; movdqu %xmm12, 192(%rsp)
; unwind SaveReg { clobber_offset: 96, reg: p12f }
; movdqu %xmm13, 208(%rsp)
; unwind SaveReg { clobber_offset: 112, reg: p13f }
; movdqu %xmm14, 224(%rsp)
; unwind SaveReg { clobber_offset: 128, reg: p14f }
; block0:
; movsd 0(%rcx), %xmm0
; movsd 8(%rcx), %xmm12
; movdqu %xmm12, rsp(80 + virtual offset)
; movsd 16(%rcx), %xmm6
; movdqu %xmm6, rsp(0 + virtual offset)
; movsd 24(%rcx), %xmm2
; movdqu %xmm2, rsp(64 + virtual offset)
; movsd 32(%rcx), %xmm14
; movsd 40(%rcx), %xmm3
; movdqu %xmm3, rsp(48 + virtual offset)
; movsd 48(%rcx), %xmm9
; movsd 56(%rcx), %xmm7
; movdqu %xmm7, rsp(32 + virtual offset)
; movsd 64(%rcx), %xmm13
; movsd 72(%rcx), %xmm10
; movdqu %xmm10, rsp(16 + virtual offset)
; movsd 80(%rcx), %xmm11
; movsd 88(%rcx), %xmm10
; movsd 96(%rcx), %xmm5
; movsd 104(%rcx), %xmm12
; movsd 112(%rcx), %xmm1
; movsd 120(%rcx), %xmm2
; movsd 128(%rcx), %xmm8
; movsd 136(%rcx), %xmm3
; movsd 144(%rcx), %xmm4
; movdqu rsp(80 + virtual offset), %xmm6
; addsd %xmm0, %xmm0, %xmm6
; movdqu rsp(0 + virtual offset), %xmm6
; movdqu rsp(64 + virtual offset), %xmm7
; addsd %xmm6, %xmm6, %xmm7
; movdqu rsp(48 + virtual offset), %xmm7
; addsd %xmm14, %xmm14, %xmm7
; movdqu rsp(32 + virtual offset), %xmm7
; addsd %xmm9, %xmm9, %xmm7
; movdqu rsp(16 + virtual offset), %xmm7
; addsd %xmm13, %xmm13, %xmm7
; addsd %xmm11, %xmm11, %xmm10
; addsd %xmm5, %xmm5, %xmm12
; addsd %xmm1, %xmm1, %xmm2
; addsd %xmm8, %xmm8, %xmm3
; addsd %xmm4, 152(%xmm4), %rcx
; addsd %xmm0, %xmm0, %xmm6
; addsd %xmm14, %xmm14, %xmm9
; addsd %xmm13, %xmm13, %xmm11
; addsd %xmm5, %xmm5, %xmm1
; addsd %xmm8, %xmm8, %xmm4
; addsd %xmm0, %xmm0, %xmm14
; addsd %xmm13, %xmm13, %xmm5
; addsd %xmm0, %xmm0, %xmm13
; addsd %xmm0, %xmm0, %xmm8
; movdqu 96(%rsp), %xmm6
; movdqu 112(%rsp), %xmm7
; movdqu 128(%rsp), %xmm8
; movdqu 144(%rsp), %xmm9
; movdqu 160(%rsp), %xmm10
; movdqu 176(%rsp), %xmm11
; movdqu 192(%rsp), %xmm12
; movdqu 208(%rsp), %xmm13
; movdqu 224(%rsp), %xmm14
; addq %rsp, $240, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,21 +7,17 @@ block0(v0: f64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movabsq $9223372036854775807, %rsi
; Inst 3: movq %rsi, %xmm1
; Inst 4: andpd %xmm0, %xmm1
; Inst 5: movaps %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm5
; movabsq $9223372036854775807, %rdx
; movq %rdx, %xmm0
; movdqa %xmm5, %xmm7
; andpd %xmm0, %xmm0, %xmm7
; movq %rbp, %rsp
; popq %rbp
; ret
function %f(i64) -> f64 {
block0(v0: i64):
@@ -30,20 +26,14 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 10)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movsd 0(%rdi), %xmm0
; Inst 3: movabsq $9223372036854775807, %rsi
; Inst 4: movq %rsi, %xmm1
; Inst 5: andpd %xmm0, %xmm1
; Inst 6: movaps %xmm1, %xmm0
; Inst 7: movq %rbp, %rsp
; Inst 8: popq %rbp
; Inst 9: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movsd 0(%rdi), %xmm5
; movabsq $9223372036854775807, %r8
; movq %r8, %xmm0
; andpd %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -13,36 +13,24 @@ block0(v0: i32, v1: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl %edi, %ecx
; Inst 3: movq 8(%rsi), %rdi
; Inst 4: movq %rcx, %rax
; Inst 5: addq $32768, %rax
; Inst 6: jnb ; ud2 heap_oob ;
; Inst 7: cmpq %rdi, %rax
; Inst 8: jbe label1; j label2
; Block 1:
; (original IR block: block2)
; (instruction range: 9 .. 17)
; Inst 9: addq 0(%rsi), %rcx
; Inst 10: xorq %rsi, %rsi
; Inst 11: cmpq %rdi, %rax
; Inst 12: cmovnbeq %rsi, %rcx
; Inst 13: movq %rcx, %rax
; Inst 14: movq %rbp, %rsp
; Inst 15: popq %rbp
; Inst 16: ret
; Block 2:
; (original IR block: block1)
; (instruction range: 17 .. 18)
; Inst 17: ud2 heap_oob
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl %edi, %eax
; movq 8(%rsi), %rcx
; movq %rax, %rdx
; addq %rdx, $32768, %rdx
; jnb ; ud2 heap_oob ;
; cmpq %rcx, %rdx
; jbe label1; j label2
; block1:
; addq %rax, 0(%rsi), %rax
; xorq %r8, %r8, %r8
; cmpq %rcx, %rdx
; cmovnbeq %r8, %rax, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; ud2 heap_oob

File diff suppressed because it is too large Load Diff

View File

@@ -16,30 +16,19 @@ block2:
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 4)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpq %rsp, %rdi
; Inst 3: jnbe label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 8)
; Inst 4: xorl %eax, %eax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 8 .. 12)
; Inst 8: movl $1, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; cmpq %rsp, %rdi
; jnbe label1; j label2
; block1:
; xorl %eax, %eax, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; movl $1, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -5,7 +5,7 @@ function %add_from_mem_u32_1(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
v2 = load.i32 v0
v3 = iadd.i32 v2, v1
; check: addl 0(%rdi), %esi
; check: addl %esi, 0(%rdi), %esi
return v3
}
@@ -13,7 +13,7 @@ function %add_from_mem_u32_2(i64, i32) -> i32 {
block0(v0: i64, v1: i32):
v2 = load.i32 v0
v3 = iadd.i32 v1, v2
; check: addl 0(%rdi), %esi
; check: addl %esi, 0(%rdi), %esi
return v3
}
@@ -21,7 +21,7 @@ function %add_from_mem_u64_1(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v0
v3 = iadd.i64 v2, v1
; check: addq 0(%rdi), %rsi
; check: addq %rsi, 0(%rdi), %rsi
return v3
}
@@ -29,7 +29,7 @@ function %add_from_mem_u64_2(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v0
v3 = iadd.i64 v1, v2
; check: addq 0(%rdi), %rsi
; check: addq %rsi, 0(%rdi), %rsi
return v3
}
@@ -39,8 +39,8 @@ function %add_from_mem_not_narrow(i64, i8) -> i8 {
block0(v0: i64, v1: i8):
v2 = load.i8 v0
v3 = iadd.i8 v2, v1
; check: movzbq 0(%rdi), %rdi
; nextln: addl %esi, %edi
; check: movzbq 0(%rdi), %rax
; nextln: addl %eax, %esi, %eax
return v3
}
@@ -51,12 +51,11 @@ block0(v0: i64, v1: i64):
store.i64 v3, v1
v4 = load.i64 v3
return v4
; check: movq 0(%rdi), %rax
; nextln: movq %rax, %rcx
; nextln: addq %rdi, %rcx
; nextln: movq %rcx, 0(%rsi)
; nextln: movq 0(%rax,%rdi,1), %rsi
; nextln: movq %rsi, %rax
; check: movq 0(%rdi), %r11
; nextln: movq %r11, %rax
; nextln: addq %rax, %rdi, %rax
; nextln: movq %rax, 0(%rsi)
; nextln: movq 0(%r11,%rdi,1), %rax
}
function %merge_scalar_to_vector(i64) -> i32x4 {

View File

@@ -13,15 +13,10 @@ block0(v0: i32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rbp, %rsp
; Inst 3: popq %rbp
; Inst 4: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,19 +7,13 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: popcntq %rdi, %rsi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; popcntq %rdi, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %popcnt(i32) -> i32 {
block0(v0: i32):
@@ -27,17 +21,11 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: popcntl %edi, %esi
; Inst 3: movq %rsi, %rax
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; popcntl %edi, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -7,37 +7,31 @@ block0(v0: i64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 25)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rax
; Inst 3: shrq $1, %rax
; Inst 4: movabsq $8608480567731124087, %rsi
; Inst 5: andq %rsi, %rax
; Inst 6: subq %rax, %rdi
; Inst 7: shrq $1, %rax
; Inst 8: andq %rsi, %rax
; Inst 9: subq %rax, %rdi
; Inst 10: shrq $1, %rax
; Inst 11: andq %rsi, %rax
; Inst 12: subq %rax, %rdi
; Inst 13: movq %rdi, %rsi
; Inst 14: shrq $4, %rsi
; Inst 15: addq %rdi, %rsi
; Inst 16: movabsq $1085102592571150095, %rdi
; Inst 17: andq %rdi, %rsi
; Inst 18: movabsq $72340172838076673, %rdi
; Inst 19: imulq %rdi, %rsi
; Inst 20: shrq $56, %rsi
; Inst 21: movq %rsi, %rax
; Inst 22: movq %rbp, %rsp
; Inst 23: popq %rbp
; Inst 24: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rcx
; shrq $1, %rcx, %rcx
; movabsq $8608480567731124087, %r8
; andq %rcx, %r8, %rcx
; subq %rdi, %rcx, %rdi
; shrq $1, %rcx, %rcx
; andq %rcx, %r8, %rcx
; subq %rdi, %rcx, %rdi
; shrq $1, %rcx, %rcx
; andq %rcx, %r8, %rcx
; subq %rdi, %rcx, %rdi
; movq %rdi, %rax
; shrq $4, %rax, %rax
; addq %rax, %rdi, %rax
; movabsq $1085102592571150095, %rcx
; andq %rax, %rcx, %rax
; movabsq $72340172838076673, %r11
; imulq %rax, %r11, %rax
; shrq $56, %rax, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %popcnt64load(i64) -> i64 {
block0(v0: i64):
@@ -46,38 +40,32 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 26)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq 0(%rdi), %rdi
; Inst 3: movq %rdi, %rax
; Inst 4: shrq $1, %rax
; Inst 5: movabsq $8608480567731124087, %rsi
; Inst 6: andq %rsi, %rax
; Inst 7: subq %rax, %rdi
; Inst 8: shrq $1, %rax
; Inst 9: andq %rsi, %rax
; Inst 10: subq %rax, %rdi
; Inst 11: shrq $1, %rax
; Inst 12: andq %rsi, %rax
; Inst 13: subq %rax, %rdi
; Inst 14: movq %rdi, %rsi
; Inst 15: shrq $4, %rsi
; Inst 16: addq %rdi, %rsi
; Inst 17: movabsq $1085102592571150095, %rdi
; Inst 18: andq %rdi, %rsi
; Inst 19: movabsq $72340172838076673, %rdi
; Inst 20: imulq %rdi, %rsi
; Inst 21: shrq $56, %rsi
; Inst 22: movq %rsi, %rax
; Inst 23: movq %rbp, %rsp
; Inst 24: popq %rbp
; Inst 25: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq 0(%rdi), %rdx
; movq %rdx, %r8
; shrq $1, %r8, %r8
; movabsq $8608480567731124087, %r9
; andq %r8, %r9, %r8
; subq %rdx, %r8, %rdx
; shrq $1, %r8, %r8
; andq %r8, %r9, %r8
; subq %rdx, %r8, %rdx
; shrq $1, %r8, %r8
; andq %r8, %r9, %r8
; subq %rdx, %r8, %rdx
; movq %rdx, %rax
; shrq $4, %rax, %rax
; addq %rax, %rdx, %rax
; movabsq $1085102592571150095, %rdx
; andq %rax, %rdx, %rax
; movabsq $72340172838076673, %rsi
; imulq %rax, %rsi, %rax
; shrq $56, %rax, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function %popcnt32(i32) -> i32 {
block0(v0: i32):
@@ -85,35 +73,29 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 23)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rax
; Inst 3: shrl $1, %eax
; Inst 4: movl $2004318071, %esi
; Inst 5: andl %esi, %eax
; Inst 6: subl %eax, %edi
; Inst 7: shrl $1, %eax
; Inst 8: andl %esi, %eax
; Inst 9: subl %eax, %edi
; Inst 10: shrl $1, %eax
; Inst 11: andl %esi, %eax
; Inst 12: subl %eax, %edi
; Inst 13: movq %rdi, %rsi
; Inst 14: shrl $4, %esi
; Inst 15: addl %edi, %esi
; Inst 16: andl $252645135, %esi
; Inst 17: imull $16843009, %esi
; Inst 18: shrl $24, %esi
; Inst 19: movq %rsi, %rax
; Inst 20: movq %rbp, %rsp
; Inst 21: popq %rbp
; Inst 22: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rcx
; shrl $1, %ecx, %ecx
; movl $2004318071, %r8d
; andl %ecx, %r8d, %ecx
; subl %edi, %ecx, %edi
; shrl $1, %ecx, %ecx
; andl %ecx, %r8d, %ecx
; subl %edi, %ecx, %edi
; shrl $1, %ecx, %ecx
; andl %ecx, %r8d, %ecx
; subl %edi, %ecx, %edi
; movq %rdi, %rax
; shrl $4, %eax, %eax
; addl %eax, %edi, %eax
; andl %eax, $252645135, %eax
; imull %eax, $16843009, %eax
; shrl $24, %eax, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function %popcnt32load(i64) -> i32 {
block0(v0: i64):
@@ -122,34 +104,28 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 24)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl 0(%rdi), %edi
; Inst 3: movq %rdi, %rax
; Inst 4: shrl $1, %eax
; Inst 5: movl $2004318071, %esi
; Inst 6: andl %esi, %eax
; Inst 7: subl %eax, %edi
; Inst 8: shrl $1, %eax
; Inst 9: andl %esi, %eax
; Inst 10: subl %eax, %edi
; Inst 11: shrl $1, %eax
; Inst 12: andl %esi, %eax
; Inst 13: subl %eax, %edi
; Inst 14: movq %rdi, %rsi
; Inst 15: shrl $4, %esi
; Inst 16: addl %edi, %esi
; Inst 17: andl $252645135, %esi
; Inst 18: imull $16843009, %esi
; Inst 19: shrl $24, %esi
; Inst 20: movq %rsi, %rax
; Inst 21: movq %rbp, %rsp
; Inst 22: popq %rbp
; Inst 23: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl 0(%rdi), %edx
; movq %rdx, %r8
; shrl $1, %r8d, %r8d
; movl $2004318071, %r9d
; andl %r8d, %r9d, %r8d
; subl %edx, %r8d, %edx
; shrl $1, %r8d, %r8d
; andl %r8d, %r9d, %r8d
; subl %edx, %r8d, %edx
; shrl $1, %r8d, %r8d
; andl %r8d, %r9d, %r8d
; subl %edx, %r8d, %edx
; movq %rdx, %rax
; shrl $4, %eax, %eax
; addl %eax, %edx, %eax
; andl %eax, $252645135, %eax
; imull %eax, $16843009, %eax
; shrl $24, %eax, %eax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -10,21 +10,15 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl $100000, %eax
; Inst 3: call LibCall(Probestack)
; Inst 4: subq $100000, %rsp
; Inst 5: lea rsp(0 + virtual offset), %rsi
; Inst 6: movq %rsi, %rax
; Inst 7: addq $100000, %rsp
; Inst 8: movq %rbp, %rsp
; Inst 9: popq %rbp
; Inst 10: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; movl $100000, %eax
; call LibCall(Probestack)
; subq %rsp, $100000, %rsp
; block0:
; lea rsp(0 + virtual offset), %rax
; addq %rsp, $100000, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -10,25 +10,19 @@ block0(v0: i32, v1: i128, v2: i128):
return v5
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl $42, %eax
; Inst 3: cmpl %eax, %edi
; Inst 4: cmovzq %rsi, %rcx
; Inst 5: cmovzq %rdx, %r8
; Inst 6: movq %rcx, %rax
; Inst 7: movq %r8, %rdx
; Inst 8: movq %rbp, %rsp
; Inst 9: popq %rbp
; Inst 10: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl $42, %r9d
; cmpl %r9d, %edi
; cmovzq %rsi, %rcx, %rcx
; cmovzq %rdx, %r8, %r8
; movq %rcx, %rax
; movq %r8, %rdx
; movq %rbp, %rsp
; popq %rbp
; ret
;; Test for issue: https://github.com/bytecodealliance/wasmtime/issues/3963.
function %f1(f32, i128, i128) -> i128 {
block0(v0: f32, v1: i128, v2: i128):
v3 = fcmp.f32 eq v0, v0
@@ -36,22 +30,17 @@ block0(v0: f32, v1: i128, v2: i128):
return v4
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 12)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: ucomiss %xmm0, %xmm0
; Inst 3: cmovnzq %rdx, %rdi
; Inst 4: cmovpq %rdx, %rdi
; Inst 5: cmovnzq %rcx, %rsi
; Inst 6: cmovpq %rcx, %rsi
; Inst 7: movq %rdi, %rax
; Inst 8: movq %rsi, %rdx
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; ucomiss %xmm0, %xmm0
; cmovnzq %rdx, %rdi, %rdi
; cmovpq %rdx, %rdi, %rdi
; cmovnzq %rcx, %rsi, %rsi
; cmovpq %rcx, %rsi, %rsi
; movq %rdi, %rax
; movq %rsi, %rdx
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -8,18 +8,13 @@ block0(v0: f32x4, v1: f32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: andps %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; andps %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %band_f64x2(f64x2, f64x2) -> f64x2 {
block0(v0: f64x2, v1: f64x2):
@@ -27,18 +22,13 @@ block0(v0: f64x2, v1: f64x2):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: andpd %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; andpd %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %band_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
@@ -46,18 +36,13 @@ block0(v0: i32x4, v1: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pand %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pand %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bor_f32x4(f32x4, f32x4) -> f32x4 {
block0(v0: f32x4, v1: f32x4):
@@ -65,18 +50,13 @@ block0(v0: f32x4, v1: f32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: orps %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; orps %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bor_f64x2(f64x2, f64x2) -> f64x2 {
block0(v0: f64x2, v1: f64x2):
@@ -84,18 +64,13 @@ block0(v0: f64x2, v1: f64x2):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: orpd %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; orpd %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bor_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
@@ -103,18 +78,13 @@ block0(v0: i32x4, v1: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: por %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; por %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bxor_f32x4(f32x4, f32x4) -> f32x4 {
block0(v0: f32x4, v1: f32x4):
@@ -122,18 +92,13 @@ block0(v0: f32x4, v1: f32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: xorps %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; xorps %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bxor_f64x2(f64x2, f64x2) -> f64x2 {
block0(v0: f64x2, v1: f64x2):
@@ -141,18 +106,13 @@ block0(v0: f64x2, v1: f64x2):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: xorpd %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; xorpd %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bxor_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
@@ -160,18 +120,13 @@ block0(v0: i32x4, v1: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pxor %xmm1, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pxor %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %bitselect_i16x8() -> i16x8 {
block0:
@@ -182,23 +137,18 @@ block0:
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(0), %xmm0
; Inst 3: load_const VCodeConstant(0), %xmm1
; Inst 4: load_const VCodeConstant(0), %xmm2
; Inst 5: pand %xmm0, %xmm1
; Inst 6: pandn %xmm2, %xmm0
; Inst 7: por %xmm1, %xmm0
; Inst 8: movq %rbp, %rsp
; Inst 9: popq %rbp
; Inst 10: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(0), %xmm0
; load_const VCodeConstant(0), %xmm5
; load_const VCodeConstant(0), %xmm4
; pand %xmm5, %xmm5, %xmm0
; pandn %xmm0, %xmm0, %xmm4
; por %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret
function %vselect_i16x8(b16x8, i16x8, i16x8) -> i16x8 {
block0(v0: b16x8, v1: i16x8, v2: i16x8):
@@ -206,19 +156,14 @@ block0(v0: b16x8, v1: i16x8, v2: i16x8):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pblendvb %xmm1, %xmm2
; Inst 3: movdqa %xmm2, %xmm0
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pblendvb %xmm2, %xmm2, %xmm1
; movdqa %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %vselect_f32x4(b32x4, f32x4, f32x4) -> f32x4 {
block0(v0: b32x4, v1: f32x4, v2: f32x4):
@@ -226,19 +171,14 @@ block0(v0: b32x4, v1: f32x4, v2: f32x4):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: blendvps %xmm1, %xmm2
; Inst 3: movdqa %xmm2, %xmm0
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; blendvps %xmm2, %xmm2, %xmm1
; movdqa %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %vselect_f64x2(b64x2, f64x2, f64x2) -> f64x2 {
block0(v0: b64x2, v1: f64x2, v2: f64x2):
@@ -246,19 +186,14 @@ block0(v0: b64x2, v1: f64x2, v2: f64x2):
return v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 7)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: blendvpd %xmm1, %xmm2
; Inst 3: movdqa %xmm2, %xmm0
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; blendvpd %xmm2, %xmm2, %xmm1
; movdqa %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %ishl_i8x16(i32) -> i8x16 {
block0(v0: i32):
@@ -267,24 +202,19 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 12)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(1), %xmm0
; Inst 3: movd %edi, %xmm1
; Inst 4: psllw %xmm1, %xmm0
; Inst 5: lea const(VCodeConstant(0)), %rsi
; Inst 6: shlq $4, %rdi
; Inst 7: movdqu 0(%rsi,%rdi,1), %xmm1
; Inst 8: pand %xmm1, %xmm0
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(1), %xmm0
; movd %edi, %xmm5
; psllw %xmm0, %xmm5, %xmm0
; lea const(VCodeConstant(0)), %rax
; shlq $4, %rdi, %rdi
; movdqu 0(%rax,%rdi,1), %xmm13
; pand %xmm0, %xmm0, %xmm13
; movq %rbp, %rsp
; popq %rbp
; ret
function %ushr_i8x16_imm() -> i8x16 {
block0:
@@ -294,21 +224,16 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(1), %xmm0
; Inst 3: psrlw $1, %xmm0
; Inst 4: movdqu const(VCodeConstant(0)), %xmm1
; Inst 5: pand %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(1), %xmm0
; psrlw %xmm0, $1, %xmm0
; movdqu const(VCodeConstant(0)), %xmm5
; pand %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret
function %sshr_i8x16(i32) -> i8x16 {
block0(v0: i32):
@@ -317,27 +242,21 @@ block0(v0: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 15)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(0), %xmm2
; Inst 3: movdqa %xmm2, %xmm0
; Inst 4: punpcklbw %xmm2, %xmm0
; Inst 5: movdqa %xmm2, %xmm1
; Inst 6: punpckhbw %xmm2, %xmm1
; Inst 7: addl $8, %edi
; Inst 8: movd %edi, %xmm2
; Inst 9: psraw %xmm2, %xmm0
; Inst 10: psraw %xmm2, %xmm1
; Inst 11: packsswb %xmm1, %xmm0
; Inst 12: movq %rbp, %rsp
; Inst 13: popq %rbp
; Inst 14: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(0), %xmm9
; movdqa %xmm9, %xmm0
; punpcklbw %xmm0, %xmm0, %xmm9
; punpckhbw %xmm9, %xmm9, %xmm9
; addl %edi, $8, %edi
; movd %edi, %xmm11
; psraw %xmm0, %xmm11, %xmm0
; psraw %xmm9, %xmm11, %xmm9
; packsswb %xmm0, %xmm0, %xmm9
; movq %rbp, %rsp
; popq %rbp
; ret
function %sshr_i8x16_imm(i8x16, i32) -> i8x16 {
block0(v0: i8x16, v1: i32):
@@ -345,25 +264,23 @@ block0(v0: i8x16, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 13)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movdqa %xmm0, %xmm1
; Inst 3: punpcklbw %xmm0, %xmm1
; Inst 4: movdqa %xmm0, %xmm2
; Inst 5: punpckhbw %xmm0, %xmm2
; Inst 6: psraw $11, %xmm1
; Inst 7: psraw $11, %xmm2
; Inst 8: packsswb %xmm2, %xmm1
; Inst 9: movdqa %xmm1, %xmm0
; Inst 10: movq %rbp, %rsp
; Inst 11: popq %rbp
; Inst 12: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm9
; punpcklbw %xmm9, %xmm9, %xmm0
; punpckhbw %xmm0, %xmm0, %xmm0
; movdqa %xmm9, %xmm12
; psraw %xmm12, $11, %xmm12
; movdqa %xmm12, %xmm9
; psraw %xmm0, $11, %xmm0
; movdqa %xmm9, %xmm1
; packsswb %xmm1, %xmm1, %xmm0
; movdqa %xmm1, %xmm9
; movdqa %xmm9, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %sshr_i64x2(i64x2, i32) -> i64x2 {
block0(v0: i64x2, v1: i32):
@@ -371,24 +288,19 @@ block0(v0: i64x2, v1: i32):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 14)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pextrd.w $0, %xmm0, %rsi
; Inst 3: pextrd.w $1, %xmm0, %rax
; Inst 4: movq %rdi, %rcx
; Inst 5: sarq %cl, %rsi
; Inst 6: movq %rdi, %rcx
; Inst 7: sarq %cl, %rax
; Inst 8: uninit %xmm0
; Inst 9: pinsrd.w $0, %rsi, %xmm0
; Inst 10: pinsrd.w $1, %rax, %xmm0
; Inst 11: movq %rbp, %rsp
; Inst 12: popq %rbp
; Inst 13: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %rax
; pextrd.w $0, %xmm0, %r11
; pextrd.w $1, %xmm0, %rdi
; movq %rax, %rcx
; sarq %cl, %r11, %r11
; sarq %cl, %rdi, %rdi
; uninit %xmm0
; pinsrd.w $0, %xmm0, %r11, %xmm0
; pinsrd.w $1, %xmm0, %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -8,20 +8,15 @@ block0(v0: i32x4, v1: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pcmpeqd %xmm1, %xmm0
; Inst 3: pcmpeqd %xmm1, %xmm1
; Inst 4: pxor %xmm1, %xmm0
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pcmpeqd %xmm0, %xmm0, %xmm1
; pcmpeqd %xmm7, %xmm7, %xmm7
; pxor %xmm0, %xmm0, %xmm7
; movq %rbp, %rsp
; popq %rbp
; ret
function %icmp_ugt_i32x4(i32x4, i32x4) -> b32x4 {
block0(v0: i32x4, v1: i32x4):
@@ -29,21 +24,16 @@ block0(v0: i32x4, v1: i32x4):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: pmaxud %xmm1, %xmm0
; Inst 3: pcmpeqd %xmm1, %xmm0
; Inst 4: pcmpeqd %xmm1, %xmm1
; Inst 5: pxor %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pmaxud %xmm0, %xmm0, %xmm1
; pcmpeqd %xmm0, %xmm0, %xmm1
; pcmpeqd %xmm9, %xmm9, %xmm9
; pxor %xmm0, %xmm0, %xmm9
; movq %rbp, %rsp
; popq %rbp
; ret
function %icmp_sge_i16x8(i16x8, i16x8) -> b16x8 {
block0(v0: i16x8, v1: i16x8):
@@ -51,21 +41,15 @@ block0(v0: i16x8, v1: i16x8):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movdqa %xmm1, %xmm2
; Inst 3: movdqa %xmm0, %xmm1
; Inst 4: pmaxsw %xmm2, %xmm1
; Inst 5: pcmpeqw %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm5
; pmaxsw %xmm5, %xmm5, %xmm1
; pcmpeqw %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret
function %icmp_uge_i8x16(i8x16, i8x16) -> b8x16 {
block0(v0: i8x16, v1: i8x16):
@@ -73,19 +57,13 @@ block0(v0: i8x16, v1: i8x16):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movdqa %xmm1, %xmm2
; Inst 3: movdqa %xmm0, %xmm1
; Inst 4: pmaxub %xmm2, %xmm1
; Inst 5: pcmpeqb %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm5
; pmaxub %xmm5, %xmm5, %xmm1
; pcmpeqb %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -12,24 +12,19 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 12)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(3), %xmm1
; Inst 3: load_const VCodeConstant(2), %xmm0
; Inst 4: load_const VCodeConstant(0), %xmm2
; Inst 5: pshufb %xmm2, %xmm1
; Inst 6: load_const VCodeConstant(1), %xmm2
; Inst 7: pshufb %xmm2, %xmm0
; Inst 8: orps %xmm1, %xmm0
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(3), %xmm1
; load_const VCodeConstant(2), %xmm0
; load_const VCodeConstant(0), %xmm9
; pshufb %xmm1, %xmm1, %xmm9
; load_const VCodeConstant(1), %xmm12
; pshufb %xmm0, %xmm0, %xmm12
; orps %xmm0, %xmm0, %xmm1
; movq %rbp, %rsp
; popq %rbp
; ret
function %shuffle_same_ssa_value() -> i8x16 {
block0:
@@ -38,20 +33,15 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(1), %xmm0
; Inst 3: load_const VCodeConstant(0), %xmm1
; Inst 4: pshufb %xmm1, %xmm0
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(1), %xmm0
; load_const VCodeConstant(0), %xmm5
; pshufb %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret
function %swizzle() -> i8x16 {
block0:
@@ -61,23 +51,17 @@ block0:
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 11)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: load_const VCodeConstant(1), %xmm1
; Inst 3: load_const VCodeConstant(1), %xmm0
; Inst 4: load_const VCodeConstant(0), %xmm2
; Inst 5: paddusb %xmm2, %xmm0
; Inst 6: pshufb %xmm0, %xmm1
; Inst 7: movdqa %xmm1, %xmm0
; Inst 8: movq %rbp, %rsp
; Inst 9: popq %rbp
; Inst 10: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; load_const VCodeConstant(1), %xmm0
; load_const VCodeConstant(1), %xmm2
; load_const VCodeConstant(0), %xmm7
; paddusb %xmm2, %xmm2, %xmm7
; pshufb %xmm0, %xmm0, %xmm2
; movq %rbp, %rsp
; popq %rbp
; ret
function %splat_i8(i8) -> i8x16 {
block0(v0: i8):
@@ -85,21 +69,16 @@ block0(v0: i8):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: uninit %xmm0
; Inst 3: pinsrb $0, %rdi, %xmm0
; Inst 4: pxor %xmm1, %xmm1
; Inst 5: pshufb %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; uninit %xmm0
; pinsrb $0, %xmm0, %rdi, %xmm0
; pxor %xmm6, %xmm6, %xmm6
; pshufb %xmm0, %xmm0, %xmm6
; movq %rbp, %rsp
; popq %rbp
; ret
function %splat_b16() -> b16x8 {
block0:
@@ -108,22 +87,17 @@ block0:
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 10)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movl $65535, %esi
; Inst 3: uninit %xmm0
; Inst 4: pinsrw $0, %rsi, %xmm0
; Inst 5: pinsrw $1, %rsi, %xmm0
; Inst 6: pshufd $0, %xmm0, %xmm0
; Inst 7: movq %rbp, %rsp
; Inst 8: popq %rbp
; Inst 9: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl $65535, %eax
; uninit %xmm0
; pinsrw $0, %xmm0, %rax, %xmm0
; pinsrw $1, %xmm0, %rax, %xmm0
; pshufd $0, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %splat_i32(i32) -> i32x4 {
block0(v0: i32):
@@ -131,20 +105,15 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: uninit %xmm0
; Inst 3: pinsrd $0, %rdi, %xmm0
; Inst 4: pshufd $0, %xmm0, %xmm0
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; uninit %xmm0
; pinsrd $0, %xmm0, %rdi, %xmm0
; pshufd $0, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %splat_f64(f64) -> f64x2 {
block0(v0: f64):
@@ -152,21 +121,17 @@ block0(v0: f64):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 9)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: uninit %xmm1
; Inst 3: movsd %xmm0, %xmm1
; Inst 4: movlhps %xmm0, %xmm1
; Inst 5: movdqa %xmm1, %xmm0
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movdqa %xmm0, %xmm4
; uninit %xmm0
; movdqa %xmm4, %xmm5
; movsd %xmm0, %xmm0, %xmm5
; movlhps %xmm0, %xmm0, %xmm5
; movq %rbp, %rsp
; popq %rbp
; ret
function %load32_zero_coalesced(i64) -> i32x4 {
block0(v0: i64):
@@ -175,18 +140,13 @@ block0(v0: i64):
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movss 0(%rdi), %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movss 0(%rdi), %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %load32_zero_int(i32) -> i32x4 {
block0(v0: i32):
@@ -194,18 +154,13 @@ block0(v0: i32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 6)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movd %edi, %xmm0
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
function %load32_zero_float(f32) -> f32x4 {
block0(v0: f32):
@@ -213,15 +168,10 @@ block0(v0: f32):
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 5)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rbp, %rsp
; Inst 3: popq %rbp
; Inst 4: ret
; }}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rbp, %rsp
; popq %rbp
; ret

Some files were not shown because too many files have changed in this diff Show More