| Chris Lattner | 7233462 | 2010-02-22 23:34:12 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=msp430 | FileCheck %s |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 2 | target datalayout = "e-p:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:16:16" |
| 3 | target triple = "msp430-generic-generic" |
| 4 | |
| 5 | define i16 @am1(i16* %a) nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 6 | %1 = load i16, i16* %a |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 7 | ret i16 %1 |
| 8 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 9 | ; CHECK-LABEL: am1: |
| Anton Korobeynikov | 49045c6 | 2018-11-15 12:29:43 +0000 | [diff] [blame^] | 10 | ; CHECK: mov 0(r12), r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 11 | |
| 12 | @foo = external global i16 |
| 13 | |
| 14 | define i16 @am2() nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 15 | %1 = load i16, i16* @foo |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 16 | ret i16 %1 |
| 17 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 18 | ; CHECK-LABEL: am2: |
| Anton Korobeynikov | 49045c6 | 2018-11-15 12:29:43 +0000 | [diff] [blame^] | 19 | ; CHECK: mov &foo, r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 20 | |
| 21 | @bar = internal constant [2 x i8] [ i8 32, i8 64 ] |
| 22 | |
| 23 | define i8 @am3(i16 %n) nounwind { |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 24 | %1 = getelementptr [2 x i8], [2 x i8]* @bar, i16 0, i16 %n |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 25 | %2 = load i8, i8* %1 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 26 | ret i8 %2 |
| 27 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 28 | ; CHECK-LABEL: am3: |
| Vadzim Dambrouski | eafb805 | 2017-03-02 20:25:10 +0000 | [diff] [blame] | 29 | ; CHECK: mov.b bar(r12), r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 30 | |
| 31 | define i16 @am4() nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 32 | %1 = load volatile i16, i16* inttoptr(i16 32 to i16*) |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 33 | ret i16 %1 |
| 34 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 35 | ; CHECK-LABEL: am4: |
| Anton Korobeynikov | 49045c6 | 2018-11-15 12:29:43 +0000 | [diff] [blame^] | 36 | ; CHECK: mov &32, r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 37 | |
| 38 | define i16 @am5(i16* %a) nounwind { |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 39 | %1 = getelementptr i16, i16* %a, i16 2 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 40 | %2 = load i16, i16* %1 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 41 | ret i16 %2 |
| 42 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 43 | ; CHECK-LABEL: am5: |
| Anton Korobeynikov | 49045c6 | 2018-11-15 12:29:43 +0000 | [diff] [blame^] | 44 | ; CHECK: mov 4(r12), r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 45 | |
| 46 | %S = type { i16, i16 } |
| 47 | @baz = common global %S zeroinitializer, align 1 |
| 48 | |
| 49 | define i16 @am6() nounwind { |
| David Blaikie | f72d05b | 2015-03-13 18:20:45 +0000 | [diff] [blame] | 50 | %1 = load i16, i16* getelementptr (%S, %S* @baz, i32 0, i32 1) |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 51 | ret i16 %1 |
| 52 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 53 | ; CHECK-LABEL: am6: |
| Anton Korobeynikov | 49045c6 | 2018-11-15 12:29:43 +0000 | [diff] [blame^] | 54 | ; CHECK: mov &baz+2, r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 55 | |
| 56 | %T = type { i16, [2 x i8] } |
| 57 | @duh = internal constant %T { i16 16, [2 x i8][i8 32, i8 64 ] } |
| 58 | |
| 59 | define i8 @am7(i16 %n) nounwind { |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 60 | %1 = getelementptr %T, %T* @duh, i32 0, i32 1 |
| 61 | %2 = getelementptr [2 x i8], [2 x i8]* %1, i16 0, i16 %n |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 62 | %3= load i8, i8* %2 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 63 | ret i8 %3 |
| 64 | } |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 65 | ; CHECK-LABEL: am7: |
| Vadzim Dambrouski | eafb805 | 2017-03-02 20:25:10 +0000 | [diff] [blame] | 66 | ; CHECK: mov.b duh+2(r12), r12 |
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 67 | |