1; RUN: llc -mtriple=msp430 < %s | FileCheck %s 2target datalayout = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8" 3target triple = "msp430-generic-generic" 4 5define void @rra8m(ptr %i) { 6entry: 7; CHECK-LABEL: rra8m: 8; CHECK: rra.b 2(r12) 9 %0 = getelementptr inbounds i8, ptr %i, i16 2 10 %1 = load i8, ptr %0, align 1 11 %shr = ashr i8 %1, 1 12 store i8 %shr, ptr %0, align 1 13 ret void 14} 15 16define void @rra16m(ptr %i) { 17entry: 18; CHECK-LABEL: rra16m: 19; CHECK: rra 4(r12) 20 %0 = getelementptr inbounds i16, ptr %i, i16 2 21 %1 = load i16, ptr %0, align 2 22 %shr = ashr i16 %1, 1 23 store i16 %shr, ptr %0, align 2 24 ret void 25} 26 27; TODO: `clrc; rrc.b 2(r12)` is expected 28define void @rrc8m(ptr %g) { 29entry: 30; CHECK-LABEL: rrc8m: 31; CHECK: mov.b 2(r12), r13 32; CHECK: clrc 33; CHECK: rrc.b r13 34; CHECK: mov.b r13, 2(r12) 35 %add.ptr = getelementptr inbounds i8, ptr %g, i16 2 36 %0 = load i8, ptr %add.ptr, align 1 37 %1 = lshr i8 %0, 1 38 store i8 %1, ptr %add.ptr, align 1 39 ret void 40} 41 42; TODO: `clrc; rrc 4(r12)` is expected 43define void @rrc16m(ptr %g) { 44entry: 45; CHECK-LABEL: rrc16m: 46; CHECK: mov 4(r12), r13 47; CHECK: clrc 48; CHECK: rrc r13 49; CHECK: mov r13, 4(r12) 50 %add.ptr = getelementptr inbounds i16, ptr %g, i16 2 51 %0 = load i16, ptr %add.ptr, align 2 52 %shr = lshr i16 %0, 1 53 store i16 %shr, ptr %add.ptr, align 2 54 ret void 55} 56 57define void @sxt16m(ptr %x) { 58entry: 59; CHECK-LABEL: sxt16m: 60; CHECK: sxt 4(r12) 61 %add.ptr = getelementptr inbounds i16, ptr %x, i16 2 62 %0 = bitcast ptr %add.ptr to ptr 63 %1 = load i8, ptr %0, align 1 64 %conv = sext i8 %1 to i16 65 store i16 %conv, ptr %add.ptr, align 2 66 ret void 67} 68 69