| 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 { | 
|  | 6 | %1 = load i16* %a | 
|  | 7 | ret i16 %1 | 
|  | 8 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 9 | ; CHECK-LABEL: am1: | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 10 | ; CHECK:		mov.w	0(r15), r15 | 
|  | 11 |  | 
|  | 12 | @foo = external global i16 | 
|  | 13 |  | 
|  | 14 | define i16 @am2() nounwind { | 
|  | 15 | %1 = load i16* @foo | 
|  | 16 | ret i16 %1 | 
|  | 17 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 18 | ; CHECK-LABEL: am2: | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 19 | ; CHECK:		mov.w	&foo, r15 | 
|  | 20 |  | 
|  | 21 | @bar = internal constant [2 x i8] [ i8 32, i8 64 ] | 
|  | 22 |  | 
|  | 23 | define i8 @am3(i16 %n) nounwind { | 
|  | 24 | %1 = getelementptr [2 x i8]* @bar, i16 0, i16 %n | 
|  | 25 | %2 = load i8* %1 | 
|  | 26 | ret i8 %2 | 
|  | 27 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 28 | ; CHECK-LABEL: am3: | 
| Anton Korobeynikov | 6f5523a | 2010-03-06 11:41:12 +0000 | [diff] [blame] | 29 | ; CHECK:		mov.b	bar(r15), r15 | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 30 |  | 
|  | 31 | define i16 @am4() nounwind { | 
| Chris Lattner | 6a144a2 | 2011-11-27 06:54:59 +0000 | [diff] [blame] | 32 | %1 = load volatile 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 | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 36 | ; CHECK:		mov.w	&32, r15 | 
|  | 37 |  | 
|  | 38 | define i16 @am5(i16* %a) nounwind { | 
|  | 39 | %1 = getelementptr i16* %a, i16 2 | 
|  | 40 | %2 = load i16* %1 | 
|  | 41 | ret i16 %2 | 
|  | 42 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 43 | ; CHECK-LABEL: am5: | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 44 | ; CHECK:		mov.w	4(r15), r15 | 
|  | 45 |  | 
|  | 46 | %S = type { i16, i16 } | 
|  | 47 | @baz = common global %S zeroinitializer, align 1 | 
|  | 48 |  | 
|  | 49 | define i16 @am6() nounwind { | 
|  | 50 | %1 = load i16* getelementptr (%S* @baz, i32 0, i32 1) | 
|  | 51 | ret i16 %1 | 
|  | 52 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 53 | ; CHECK-LABEL: am6: | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 54 | ; CHECK:		mov.w	&baz+2, r15 | 
|  | 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 { | 
|  | 60 | %1 = getelementptr %T* @duh, i32 0, i32 1 | 
|  | 61 | %2 = getelementptr [2 x i8]* %1, i16 0, i16 %n | 
|  | 62 | %3= load i8* %2 | 
|  | 63 | ret i8 %3 | 
|  | 64 | } | 
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 65 | ; CHECK-LABEL: am7: | 
| Anton Korobeynikov | 6f5523a | 2010-03-06 11:41:12 +0000 | [diff] [blame] | 66 | ; CHECK:		mov.b	duh+2(r15), r15 | 
| Anton Korobeynikov | 2a88785 | 2009-11-07 17:13:35 +0000 | [diff] [blame] | 67 |  |