223 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv6m-eabi -asm-verbose=false %s -o - | FileCheck %s3 4define void @test8(ptr %a) {5; CHECK-LABEL: test8:6; CHECK: ldrb r1, [r0]7; CHECK-NEXT: mvns r1, r18; CHECK-NEXT: strb r1, [r0]9; CHECK-NEXT: bx lr10 %x = load i8, ptr %a11 %xn = xor i8 %x, -112 store i8 %xn, ptr %a13 ret void14}15 16define void @test8_2(ptr %a, ptr %b) {17; CHECK-LABEL: test8_2:18; CHECK: ldrb r2, [r1]19; CHECK-NEXT: ldrb r3, [r0]20; CHECK-NEXT: mvns r3, r321; CHECK-NEXT: strb r3, [r0]22; CHECK-NEXT: mvns r0, r223; CHECK-NEXT: strb r0, [r1]24; CHECK-NEXT: bx lr25 %x = load i8, ptr %a26 %y = load i8, ptr %b27 %xn = xor i8 %x, -128 %yn = xor i8 %y, -129 store i8 %xn, ptr %a30 store i8 %yn, ptr %b31 ret void32}33 34define void @loop8(ptr %a) {35; CHECK-LABEL: loop8:36; CHECK: movs r1, #037; CHECK-NEXT: .LBB2_1:38; CHECK-NEXT: ldrb r2, [r0, r1]39; CHECK-NEXT: mvns r2, r240; CHECK-NEXT: strb r2, [r0, r1]41; CHECK-NEXT: adds r1, r1, #142; CHECK-NEXT: cmp r1, #1043; CHECK-NEXT: bne .LBB2_144; CHECK-NEXT: bx lr45entry:46 br label %for.body47 48for.body:49 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]50 %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i51 %x = load i8, ptr %arrayidx52 %xn = xor i8 %x, -153 store i8 %xn, ptr %arrayidx54 %inc = add nuw nsw i32 %i, 155 %exitcond = icmp eq i32 %inc, 1056 br i1 %exitcond, label %for.cond.cleanup, label %for.body57 58for.cond.cleanup:59 ret void60}61 62define void @loop8_2(ptr %a, ptr %b) {63; CHECK-LABEL: loop8_2:64; CHECK: .save {r4, lr}65; CHECK-NEXT: push {r4, lr}66; CHECK-NEXT: movs r2, #067; CHECK-NEXT: .LBB3_1:68; CHECK-NEXT: ldrb r3, [r1, r2]69; CHECK-NEXT: ldrb r4, [r0, r2]70; CHECK-NEXT: mvns r4, r471; CHECK-NEXT: strb r4, [r0, r2]72; CHECK-NEXT: mvns r3, r373; CHECK-NEXT: strb r3, [r1, r2]74; CHECK-NEXT: adds r2, r2, #175; CHECK-NEXT: cmp r2, #1076; CHECK-NEXT: bne .LBB3_177; CHECK-NEXT: pop {r4, pc}78entry:79 br label %for.body80 81for.body:82 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]83 %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i84 %arrayidx2 = getelementptr inbounds i8, ptr %b, i32 %i85 %x = load i8, ptr %arrayidx86 %y = load i8, ptr %arrayidx287 %xn = xor i8 %x, -188 %yn = xor i8 %y, -189 store i8 %xn, ptr %arrayidx90 store i8 %yn, ptr %arrayidx291 %inc = add nuw nsw i32 %i, 192 %exitcond = icmp eq i32 %inc, 1093 br i1 %exitcond, label %for.cond.cleanup, label %for.body94 95for.cond.cleanup:96 ret void97}98 99define void @test32(ptr %a) {100; CHECK-LABEL: test32:101; CHECK: ldr r1, [r0]102; CHECK-NEXT: mvns r1, r1103; CHECK-NEXT: str r1, [r0]104; CHECK-NEXT: bx lr105 %x = load i32, ptr %a106 %xn = xor i32 %x, -1107 store i32 %xn, ptr %a108 ret void109}110 111define void @test32_2(ptr %a, ptr %b) {112; CHECK-LABEL: test32_2:113; CHECK: ldr r2, [r1]114; CHECK-NEXT: ldr r3, [r0]115; CHECK-NEXT: mvns r3, r3116; CHECK-NEXT: str r3, [r0]117; CHECK-NEXT: mvns r0, r2118; CHECK-NEXT: str r0, [r1]119; CHECK-NEXT: bx lr120 %x = load i32, ptr %a121 %y = load i32, ptr %b122 %xn = xor i32 %x, -1123 %yn = xor i32 %y, -1124 store i32 %xn, ptr %a125 store i32 %yn, ptr %b126 ret void127}128 129define void @loop32(ptr %a) {130; CHECK-LABEL: loop32:131; CHECK: movs r1, #0132; CHECK-NEXT: .LBB6_1:133; CHECK-NEXT: ldr r2, [r0, r1]134; CHECK-NEXT: mvns r2, r2135; CHECK-NEXT: str r2, [r0, r1]136; CHECK-NEXT: adds r1, r1, #4137; CHECK-NEXT: cmp r1, #40138; CHECK-NEXT: bne .LBB6_1139; CHECK-NEXT: bx lr140entry:141 br label %for.body142 143for.body:144 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]145 %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i146 %x = load i32, ptr %arrayidx147 %xn = xor i32 %x, -1148 store i32 %xn, ptr %arrayidx149 %inc = add nuw nsw i32 %i, 1150 %exitcond = icmp eq i32 %inc, 10151 br i1 %exitcond, label %for.cond.cleanup, label %for.body152 153for.cond.cleanup:154 ret void155}156 157define void @loop32_2(ptr %a, ptr %b) {158; CHECK-LABEL: loop32_2:159; CHECK: .save {r4, lr}160; CHECK-NEXT: push {r4, lr}161; CHECK-NEXT: movs r2, #0162; CHECK-NEXT: .LBB7_1:163; CHECK-NEXT: ldr r3, [r1, r2]164; CHECK-NEXT: ldr r4, [r0, r2]165; CHECK-NEXT: mvns r4, r4166; CHECK-NEXT: str r4, [r0, r2]167; CHECK-NEXT: mvns r3, r3168; CHECK-NEXT: str r3, [r1, r2]169; CHECK-NEXT: adds r2, r2, #4170; CHECK-NEXT: cmp r2, #40171; CHECK-NEXT: bne .LBB7_1172; CHECK-NEXT: pop {r4, pc}173entry:174 br label %for.body175 176for.body:177 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]178 %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i179 %arrayidx2 = getelementptr inbounds i32, ptr %b, i32 %i180 %x = load i32, ptr %arrayidx181 %y = load i32, ptr %arrayidx2182 %xn = xor i32 %x, -1183 %yn = xor i32 %y, -1184 store i32 %xn, ptr %arrayidx185 store i32 %yn, ptr %arrayidx2186 %inc = add nuw nsw i32 %i, 1187 %exitcond = icmp eq i32 %inc, 10188 br i1 %exitcond, label %for.cond.cleanup, label %for.body189 190for.cond.cleanup:191 ret void192}193 194 195define void @test128(ptr %a) {196; CHECK-LABEL: test128:197; CHECK: ldr r1, [r0, #8]198; CHECK-NEXT: ldr r2, .LCPI8_0199; CHECK-NEXT: eors r2, r1200; CHECK-NEXT: str r2, [r0, #8]201; CHECK-NEXT: ldr r1, [r0]202; CHECK-NEXT: ldr r2, .LCPI8_1203; CHECK-NEXT: eors r2, r1204; CHECK-NEXT: str r2, [r0]205; CHECK-NEXT: ldr r1, [r0, #4]206; CHECK-NEXT: ldr r2, .LCPI8_2207; CHECK-NEXT: eors r2, r1208; CHECK-NEXT: str r2, [r0, #4]209; CHECK-NEXT: bx lr210; CHECK-NEXT: .p2align 2211; CHECK-NEXT: .LCPI8_0:212; CHECK-NEXT: .long 6692605213; CHECK-NEXT: .LCPI8_1:214; CHECK-NEXT: .long 2080661269215; CHECK-NEXT: .LCPI8_2:216; CHECK-NEXT: .long 4075008415217 %x = load i128, ptr %a218 %xn = xor i128 %x, 123456789123456789123456789219 store i128 %xn, ptr %a220 ret void221}222 223