diff options
| author | Dylan McKay <dylanmckay34@gmail.com> | 2016-12-10 11:49:07 +0000 |
|---|---|---|
| committer | Dylan McKay <dylanmckay34@gmail.com> | 2016-12-10 11:49:07 +0000 |
| commit | d8a603c23b1db5337ad3ae41a6f646ceab01c572 (patch) | |
| tree | a59d514772b370754731f90145102479260ea28c /llvm/test/CodeGen/AVR/inline-asm/multibyte.ll | |
| parent | a7e05487225bbcbcb0ae6a706f96806b621eb143 (diff) | |
| download | bcm5719-llvm-d8a603c23b1db5337ad3ae41a6f646ceab01c572.tar.gz bcm5719-llvm-d8a603c23b1db5337ad3ae41a6f646ceab01c572.zip | |
[AVR] Fix and clean up the inline assembly tests
There was a bug where we would hit an assertion if 'Q' was used as a
constraint.
I also removed hardcoded register names to prefer regexes so the tests
don't break when the register allocator changes.
llvm-svn: 289325
Diffstat (limited to 'llvm/test/CodeGen/AVR/inline-asm/multibyte.ll')
| -rw-r--r-- | llvm/test/CodeGen/AVR/inline-asm/multibyte.ll | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AVR/inline-asm/multibyte.ll b/llvm/test/CodeGen/AVR/inline-asm/multibyte.ll new file mode 100644 index 00000000000..34cdf5d006e --- /dev/null +++ b/llvm/test/CodeGen/AVR/inline-asm/multibyte.ll @@ -0,0 +1,135 @@ +; RUN: llc < %s -march=avr | FileCheck %s +; XFAIL: * + +; Multibyte references + +; CHECK-LABEL: multibyte_i16 +define void @multibyte_i16(i16 %a) { +entry: +; CHECK: instr r24 r25 + call void asm sideeffect "instr ${0:A} ${0:B}", "r"(i16 %a) +; CHECK: instr r25 r24 + call void asm sideeffect "instr ${0:B} ${0:A}", "r"(i16 %a) + ret void +} + +; CHECK-LABEL: multibyte_i32 +define void @multibyte_i32(i32 %a) { +entry: +; CHECK: instr r22 r23 r24 r25 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "r"(i32 %a) +; CHECK: instr r25 r24 r23 r22 + call void asm sideeffect "instr ${0:D} ${0:C} ${0:B} ${0:A}", "r"(i32 %a) + ret void +} + +; CHECK-LABEL: multibyte_alternative_name +define void @multibyte_alternative_name(i16* %p) { +entry: +; CHECK: instr Z + call void asm sideeffect "instr ${0:a}", "e" (i16* %p) + ret void +} + +; CHECK-LABEL: multibyte_a_i32 +define void @multibyte_a_i32() { +entry: + %a = alloca i32 + %0 = load i32, i32* %a +; CHECK: instr r20 r21 r22 r23 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "a"(i32 %0) + ret void +} + +@c = internal global i32 0 + +; CHECK-LABEL: multibyte_b_i32 +define void @multibyte_b_i32() { +entry: + %0 = load i32, i32* @c +; CHECK: instr r28 r29 r30 r31 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "b"(i32 %0) + ret void +} + +; CHECK-LABEL: multibyte_d_i32 +define void @multibyte_d_i32() { +entry: + %a = alloca i32 + %0 = load i32, i32* %a +; CHECK: instr r18 r19 r24 r25 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "d"(i32 %0) + ret void +} + +; CHECK-LABEL: multibyte_e_i32 +define void @multibyte_e_i32() { +entry: + %a = alloca i32 + %0 = load i32, i32* %a +; CHECK: instr r26 r27 r30 r31 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "e"(i32 %0) + ret void +} + +; CHECK-LABEL: multibyte_l_i32 +define void @multibyte_l_i32() { +entry: + %a = alloca i32 + %0 = load i32, i32* %a +; CHECK: instr r12 r13 r14 r15 + call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "l"(i32 %0) + ret void +} + +; CHECK-LABEL: multibyte_a_i16 +define void @multibyte_a_i16() { +entry: + %a = alloca i16 + %0 = load i16, i16* %a +; CHECK: instr r22 r23 + call void asm sideeffect "instr ${0:A} ${0:B}", "a"(i16 %0) + ret void +} + +; CHECK-LABEL: multibyte_b_i16 +define void @multibyte_b_i16() { +entry: + %a = alloca i16 + %0 = load i16, i16* %a +; CHECK: instr r30 r31 + call void asm sideeffect "instr ${0:A} ${0:B}", "b"(i16 %0) + ret void +} + +; CHECK-LABEL: multibyte_d_i16 +define void @multibyte_d_i16() { +entry: + %a = alloca i16 + %0 = load i16, i16* %a +; CHECK: instr r24 r25 + call void asm sideeffect "instr ${0:A} ${0:B}", "d"(i16 %0) + ret void +} + +; CHECK-LABEL: multibyte_e_i16 +define void @multibyte_e_i16() { +entry: + %a = alloca i16 + %0 = load i16, i16* %a +; CHECK: instr r30 r31 + call void asm sideeffect "instr ${0:A} ${0:B}", "e"(i16 %0) + ret void +} + +; CHECK-LABEL: multibyte_l_i16 +define void @multibyte_l_i16() { +entry: + %a = alloca i16 + %0 = load i16, i16* %a +; CHECK: instr r14 r15 + call void asm sideeffect "instr ${0:A} ${0:B}", "l"(i16 %0) + ret void +} + + |

