1; RUN: llc -mtriple=avr -filetype=asm -O1 < %s | FileCheck %s 2 3define void @check60(ptr %1) { 4; CHECK-LABEL: check60: 5; CHECK-NEXT: %bb.0 6; CHECK-NEXT: ldi r18, 0 7; CHECK-NEXT: ldi r19, 0 8; CHECK-NEXT: mov r30, r24 9; CHECK-NEXT: mov r31, r25 10; CHECK-NEXT: std Z+63, r19 11; CHECK-NEXT: std Z+62, r18 12; CHECK-NEXT: ldi r24, 210 13; CHECK-NEXT: ldi r25, 4 14; CHECK-NEXT: std Z+61, r25 15; CHECK-NEXT: std Z+60, r24 16; CHECK-NEXT: ret 17 18bb0: 19 %2 = getelementptr i8, ptr %1, i8 60 20 store i32 1234, ptr %2 21 ret void 22} 23 24define void @check61(ptr %1) { 25; CHECK-LABEL: check61: 26; CHECK-NEXT: %bb.0 27; CHECK-NEXT: ldi r18, 210 28; CHECK-NEXT: ldi r19, 4 29; CHECK-NEXT: mov r30, r24 30; CHECK-NEXT: mov r31, r25 31; CHECK-NEXT: std Z+62, r19 32; CHECK-NEXT: std Z+61, r18 33; CHECK-NEXT: adiw r24, 63 34; CHECK-NEXT: ldi r18, 0 35; CHECK-NEXT: ldi r19, 0 36; CHECK-NEXT: mov r30, r24 37; CHECK-NEXT: mov r31, r25 38; CHECK-NEXT: std Z+1, r19 39; CHECK-NEXT: st Z, r18 40 41bb0: 42 %2 = getelementptr i8, ptr %1, i8 61 43 store i32 1234, ptr %2 44 ret void 45} 46 47define void @check62(ptr %1) { 48; CHECK-LABEL: check62: 49; CHECK-NEXT: %bb.0 50; CHECK-NEXT: ldi r18, 210 51; CHECK-NEXT: ldi r19, 4 52; CHECK-NEXT: mov r30, r24 53; CHECK-NEXT: mov r31, r25 54; CHECK-NEXT: std Z+63, r19 55; CHECK-NEXT: std Z+62, r18 56; CHECK-NEXT: adiw r24, 62 57; CHECK-NEXT: ldi r18, 0 58; CHECK-NEXT: ldi r19, 0 59; CHECK-NEXT: mov r30, r24 60; CHECK-NEXT: mov r31, r25 61; CHECK-NEXT: std Z+3, r19 62; CHECK-NEXT: std Z+2, r18 63; CHECK-NEXT: ret 64 65bb0: 66 %2 = getelementptr i8, ptr %1, i8 62 67 store i32 1234, ptr %2 68 ret void 69} 70 71define void @check63(ptr %1) { 72; CHECK-LABEL: check63: 73; CHECK-NEXT: %bb.0 74; CHECK-NEXT: adiw r24, 63 75; CHECK-NEXT: ldi r18, 0 76; CHECK-NEXT: ldi r19, 0 77; CHECK-NEXT: mov r30, r24 78; CHECK-NEXT: mov r31, r25 79; CHECK-NEXT: std Z+3, r19 80; CHECK-NEXT: std Z+2, r18 81; CHECK-NEXT: ldi r24, 210 82; CHECK-NEXT: ldi r25, 4 83; CHECK-NEXT: std Z+1, r25 84; CHECK-NEXT: st Z, r24 85; CHECK-NEXT: ret 86 87bb0: 88 %2 = getelementptr i8, ptr %1, i8 63 89 store i32 1234, ptr %2 90 ret void 91} 92 93define void @check64(ptr %1) { 94; CHECK-LABEL: check64: 95; CHECK-NEXT: %bb.0 96; CHECK-NEXT: subi r24, 192 97; CHECK-NEXT: sbci r25, 255 98; CHECK-NEXT: ldi r18, 0 99; CHECK-NEXT: ldi r19, 0 100; CHECK-NEXT: mov r30, r24 101; CHECK-NEXT: mov r31, r25 102; CHECK-NEXT: std Z+3, r19 103; CHECK-NEXT: std Z+2, r18 104; CHECK-NEXT: ldi r24, 210 105; CHECK-NEXT: ldi r25, 4 106; CHECK-NEXT: std Z+1, r25 107; CHECK-NEXT: st Z, r24 108; CHECK-NEXT: ret 109 110bb0: 111 %2 = getelementptr i8, ptr %1, i8 64 112 store i32 1234, ptr %2 113 ret void 114} 115 116define void @check65(ptr %1) { 117; CHECK-LABEL: check65: 118; CHECK-NEXT: %bb.0 119; CHECK-NEXT: subi r24, 191 120; CHECK-NEXT: sbci r25, 255 121; CHECK-NEXT: ldi r18, 0 122; CHECK-NEXT: ldi r19, 0 123; CHECK-NEXT: mov r30, r24 124; CHECK-NEXT: mov r31, r25 125; CHECK-NEXT: std Z+3, r19 126; CHECK-NEXT: std Z+2, r18 127; CHECK-NEXT: ldi r24, 210 128; CHECK-NEXT: ldi r25, 4 129; CHECK-NEXT: std Z+1, r25 130; CHECK-NEXT: st Z, r24 131; CHECK-NEXT: ret 132 133bb0: 134 %2 = getelementptr i8, ptr %1, i8 65 135 store i32 1234, ptr %2 136 ret void 137} 138