137 lines · plain
1; RUN: llc -mattr=avr6,sram < %s -mtriple=avr | FileCheck %s2 3define void @store8(ptr %x, i8 %y) {4; CHECK-LABEL: store8:5; CHECK: st {{[XYZ]}}, r226 store i8 %y, ptr %x7 ret void8}9 10define void @store16(ptr %x, i16 %y) {11; CHECK-LABEL: store16:12; CHECK: std {{[YZ]}}+1, r2313; CHECK: st {{[YZ]}}, r2214 store i16 %y, ptr %x15 ret void16}17 18define void @store8disp(ptr %x, i8 %y) {19; CHECK-LABEL: store8disp:20; CHECK: std {{[YZ]}}+63, r2221 %arrayidx = getelementptr inbounds i8, ptr %x, i16 6322 store i8 %y, ptr %arrayidx23 ret void24}25 26define void @store8nodisp(ptr %x, i8 %y) {27; CHECK-LABEL: store8nodisp:28; CHECK: movw r26, r2429; CHECK: subi r26, 19230; CHECK: sbci r27, 25531; CHECK: st {{[XYZ]}}, r2232 %arrayidx = getelementptr inbounds i8, ptr %x, i16 6433 store i8 %y, ptr %arrayidx34 ret void35}36 37define void @store16disp(ptr %x, i16 %y) {38; CHECK-LABEL: store16disp:39; CHECK: std {{[YZ]}}+63, r2340; CHECK: std {{[YZ]}}+62, r2241 %arrayidx = getelementptr inbounds i16, ptr %x, i16 3142 store i16 %y, ptr %arrayidx43 ret void44}45 46define void @store16nodisp(ptr %x, i16 %y) {47; CHECK-LABEL: store16nodisp:48; CHECK: subi r24, 19249; CHECK: sbci r25, 25550; CHECK: movw r30, r2451; CHECK: std {{[YZ]}}+1, r2352; CHECK: st {{[YZ]}}, r2253 %arrayidx = getelementptr inbounds i16, ptr %x, i16 3254 store i16 %y, ptr %arrayidx55 ret void56}57 58define void @store8postinc(ptr %x, i8 %y) {59; CHECK-LABEL: store8postinc:60; CHECK: st {{[XYZ]}}+, {{.*}}61entry:62 %tobool3 = icmp eq i8 %y, 063 br i1 %tobool3, label %while.end, label %while.body64while.body: ; preds = %entry, %while.body65 %dec5.in = phi i8 [ %dec5, %while.body ], [ %y, %entry ]66 %x.addr.04 = phi ptr [ %incdec.ptr, %while.body ], [ %x, %entry ]67 %dec5 = add i8 %dec5.in, -168 %incdec.ptr = getelementptr inbounds i8, ptr %x.addr.04, i16 169 store i8 %dec5, ptr %x.addr.0470 %tobool = icmp eq i8 %dec5, 071 br i1 %tobool, label %while.end, label %while.body72while.end: ; preds = %while.body, %entry73 ret void74}75 76define void @store16postinc(ptr %x, i16 %y) {77; CHECK-LABEL: store16postinc:78; CHECK: std {{[XYZ]}}+1, {{.*}}79; CHECK: st {{[XYZ]}}, {{.*}}80entry:81 %tobool3 = icmp eq i16 %y, 082 br i1 %tobool3, label %while.end, label %while.body83while.body: ; preds = %entry, %while.body84 %dec5.in = phi i16 [ %dec5, %while.body ], [ %y, %entry ]85 %x.addr.04 = phi ptr [ %incdec.ptr, %while.body ], [ %x, %entry ]86 %dec5 = add nsw i16 %dec5.in, -187 %incdec.ptr = getelementptr inbounds i16, ptr %x.addr.04, i16 188 store i16 %dec5, ptr %x.addr.0489 %tobool = icmp eq i16 %dec5, 090 br i1 %tobool, label %while.end, label %while.body91while.end: ; preds = %while.body, %entry92 ret void93}94 95define void @store8predec(ptr %x, i8 %y) {96; CHECK-LABEL: store8predec:97; TODO: st -{{[XYZ]}}, {{.*}}98; CHECK: sbiw r26, 199; CHECK: st X, {{.*}}100entry:101 %tobool3 = icmp eq i8 %y, 0102 br i1 %tobool3, label %while.end, label %while.body103while.body: ; preds = %entry, %while.body104 %dec5.in = phi i8 [ %dec5, %while.body ], [ %y, %entry ]105 %x.addr.04 = phi ptr [ %incdec.ptr, %while.body ], [ %x, %entry ]106 %dec5 = add i8 %dec5.in, -1107 %incdec.ptr = getelementptr inbounds i8, ptr %x.addr.04, i16 -1108 store i8 %dec5, ptr %incdec.ptr109 %tobool = icmp eq i8 %dec5, 0110 br i1 %tobool, label %while.end, label %while.body111while.end: ; preds = %while.body, %entry112 ret void113}114 115define void @store16predec(ptr %x, i16 %y) {116; CHECK-LABEL: store16predec:117; TODO: st -{{[XYZ]}}, {{.*}}118; TODO: st -{{[XYZ]}}, {{.*}}119; CHECK: sbiw r24, 2120; CHECK: movw r30, r24121; CHECK: std Z+1, {{.*}}122; CHECK: st Z, {{.*}}123entry:124 %tobool3 = icmp eq i16 %y, 0125 br i1 %tobool3, label %while.end, label %while.body126while.body: ; preds = %entry, %while.body127 %dec5.in = phi i16 [ %dec5, %while.body ], [ %y, %entry ]128 %x.addr.04 = phi ptr [ %incdec.ptr, %while.body ], [ %x, %entry ]129 %dec5 = add nsw i16 %dec5.in, -1130 %incdec.ptr = getelementptr inbounds i16, ptr %x.addr.04, i16 -1131 store i16 %dec5, ptr %incdec.ptr132 %tobool = icmp eq i16 %dec5, 0133 br i1 %tobool, label %while.end, label %while.body134while.end: ; preds = %while.body, %entry135 ret void136}137