|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -mtriple=aarch64 -mattr=+ls64 -verify-machineinstrs -o - %s | FileCheck %s
|
3 | 3 |
|
4 |
| -%struct.foo = type { [8 x i64] } |
5 |
| - |
6 | 4 | define void @load(ptr %output, ptr %addr) {
|
7 | 5 | ; CHECK-LABEL: load:
|
8 | 6 | ; CHECK: // %bb.0: // %entry
|
@@ -103,3 +101,37 @@ entry:
|
103 | 101 | call void asm sideeffect "st64b $0,[$1]", "r,r,~{memory}"(i512 %s.sroa.0.0.insert.insert, ptr %addr)
|
104 | 102 | ret void
|
105 | 103 | }
|
| 104 | + |
| 105 | +define void @multi_output(ptr %addr) { |
| 106 | +; CHECK-LABEL: multi_output: |
| 107 | +; CHECK: // %bb.0: // %entry |
| 108 | +; CHECK-NEXT: //APP |
| 109 | +; CHECK-NEXT: ld64b x0, [x0] |
| 110 | +; CHECK-NEXT: mov x8, x0 |
| 111 | +; CHECK-NEXT: //NO_APP |
| 112 | +; CHECK-NEXT: stp x6, x7, [x8, #48] |
| 113 | +; CHECK-NEXT: stp x4, x5, [x8, #32] |
| 114 | +; CHECK-NEXT: stp x2, x3, [x8, #16] |
| 115 | +; CHECK-NEXT: stp x0, x1, [x8] |
| 116 | +; CHECK-NEXT: ret |
| 117 | +entry: |
| 118 | + %val = call { i512, ptr } asm sideeffect "ld64b $0, [$2]; mov $1, $2", "=r,=r,r,~{memory}"(ptr %addr) |
| 119 | + %val0 = extractvalue { i512, ptr } %val, 0 |
| 120 | + %val1 = extractvalue { i512, ptr } %val, 1 |
| 121 | + store i512 %val0, ptr %val1, align 8 |
| 122 | + ret void |
| 123 | +} |
| 124 | + |
| 125 | +; FIXME: This case still crashes in RegsForValue::AddInlineAsmOperands without |
| 126 | +; additional changes. I believe this is a bug in target-independent code, that |
| 127 | +; is worked around in the RISC-V and SystemZ backends, but should almost |
| 128 | +; certainly be fixed instead. |
| 129 | +; define void @tied_constraints(ptr %addr) { |
| 130 | +; entry: |
| 131 | +; %in = load i512, ptr %addr, align 8 |
| 132 | +; %val = call { i512, ptr } asm sideeffect "nop", "=r,=r,0,1,~{memory}"(i512 %in, ptr %addr) |
| 133 | +; %val0 = extractvalue { i512, ptr } %val, 0 |
| 134 | +; %val1 = extractvalue { i512, ptr } %val, 1 |
| 135 | +; store i512 %val0, ptr %val1, align 8 |
| 136 | +; ret void |
| 137 | +; } |
0 commit comments