brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.6 KiB · 1122b13 Raw
487 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=avr -mattr=+movw -mattr=+elpm -mattr=+elpmx -mattr=+lpm -mattr=+lpmx -verify-machineinstrs \3; RUN:     | FileCheck %s4; RUN: llc < %s -mtriple=avr -mattr=+movw -mattr=+elpm -mattr=-elpmx -mattr=+lpm -mattr=-lpmx -verify-machineinstrs \5; RUN:     | FileCheck --check-prefix=NOX %s6 7@arr0 = addrspace(1) constant [4 x i16] [i16 123, i16 24, i16 56, i16 37], align 18@arr1 = addrspace(2) constant [4 x i16] [i16 123, i16 34, i16 46, i16 27], align 19@arr2 = addrspace(3) constant [4 x i16] [i16 123, i16 23, i16 45, i16 17], align 110 11define i16 @foo0(i16 %a, i16 %b) {12; CHECK-LABEL: foo0:13; CHECK:       ; %bb.0: ; %entry14; CHECK-NEXT:    lsl r2215; CHECK-NEXT:    rol r2316; CHECK-NEXT:    subi r22, lo8(-(arr0))17; CHECK-NEXT:    sbci r23, hi8(-(arr0))18; CHECK-NEXT:    movw r30, r2219; CHECK-NEXT:    lpm r18, Z+20; CHECK-NEXT:    lpm r19, Z21; CHECK-NEXT:    lsl r2422; CHECK-NEXT:    rol r2523; CHECK-NEXT:    subi r24, lo8(-(arr0))24; CHECK-NEXT:    sbci r25, hi8(-(arr0))25; CHECK-NEXT:    movw r30, r2426; CHECK-NEXT:    lpm r24, Z+27; CHECK-NEXT:    lpm r25, Z28; CHECK-NEXT:    sub r24, r1829; CHECK-NEXT:    sbc r25, r1930; CHECK-NEXT:    ret31;32; NOX-LABEL: foo0:33; NOX:       ; %bb.0: ; %entry34; NOX-NEXT:    lsl r2235; NOX-NEXT:    rol r2336; NOX-NEXT:    subi r22, lo8(-(arr0))37; NOX-NEXT:    sbci r23, hi8(-(arr0))38; NOX-NEXT:    movw r30, r2239; NOX-NEXT:    lpm40; NOX-NEXT:    mov r18, r041; NOX-NEXT:    adiw r30, 142; NOX-NEXT:    lpm43; NOX-NEXT:    mov r19, r044; NOX-NEXT:    lsl r2445; NOX-NEXT:    rol r2546; NOX-NEXT:    subi r24, lo8(-(arr0))47; NOX-NEXT:    sbci r25, hi8(-(arr0))48; NOX-NEXT:    movw r30, r2449; NOX-NEXT:    lpm50; NOX-NEXT:    mov r24, r051; NOX-NEXT:    adiw r30, 152; NOX-NEXT:    lpm53; NOX-NEXT:    mov r25, r054; NOX-NEXT:    sub r24, r1855; NOX-NEXT:    sbc r25, r1956; NOX-NEXT:    ret57entry:58  %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %a59  %0 = load i16, ptr addrspace(1) %arrayidx, align 160  %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %b61  %1 = load i16, ptr addrspace(1) %arrayidx1, align 162  %sub = sub nsw i16 %0, %163  ret i16 %sub64}65 66define i16 @foo1(i16 %a, i16 %b) {67; CHECK-LABEL: foo1:68; CHECK:       ; %bb.0: ; %entry69; CHECK-NEXT:    lsl r2270; CHECK-NEXT:    rol r2371; CHECK-NEXT:    subi r22, lo8(-(arr1))72; CHECK-NEXT:    sbci r23, hi8(-(arr1))73; CHECK-NEXT:    movw r30, r2274; CHECK-NEXT:    ldi r18, 175; CHECK-NEXT:    out 59, r1876; CHECK-NEXT:    elpm r20, Z+77; CHECK-NEXT:    elpm r21, Z78; CHECK-NEXT:    lsl r2479; CHECK-NEXT:    rol r2580; CHECK-NEXT:    subi r24, lo8(-(arr0))81; CHECK-NEXT:    sbci r25, hi8(-(arr0))82; CHECK-NEXT:    movw r30, r2483; CHECK-NEXT:    lpm r24, Z+84; CHECK-NEXT:    lpm r25, Z85; CHECK-NEXT:    sub r24, r2086; CHECK-NEXT:    sbc r25, r2187; CHECK-NEXT:    ret88;89; NOX-LABEL: foo1:90; NOX:       ; %bb.0: ; %entry91; NOX-NEXT:    lsl r2292; NOX-NEXT:    rol r2393; NOX-NEXT:    subi r22, lo8(-(arr1))94; NOX-NEXT:    sbci r23, hi8(-(arr1))95; NOX-NEXT:    movw r30, r2296; NOX-NEXT:    ldi r18, 197; NOX-NEXT:    out 59, r1898; NOX-NEXT:    elpm99; NOX-NEXT:    mov r20, r0100; NOX-NEXT:    adiw r30, 1101; NOX-NEXT:    elpm102; NOX-NEXT:    mov r21, r0103; NOX-NEXT:    lsl r24104; NOX-NEXT:    rol r25105; NOX-NEXT:    subi r24, lo8(-(arr0))106; NOX-NEXT:    sbci r25, hi8(-(arr0))107; NOX-NEXT:    movw r30, r24108; NOX-NEXT:    lpm109; NOX-NEXT:    mov r24, r0110; NOX-NEXT:    adiw r30, 1111; NOX-NEXT:    lpm112; NOX-NEXT:    mov r25, r0113; NOX-NEXT:    sub r24, r20114; NOX-NEXT:    sbc r25, r21115; NOX-NEXT:    ret116entry:117  %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %a118  %0 = load i16, ptr addrspace(1) %arrayidx, align 1119  %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(2) @arr1, i16 0, i16 %b120  %1 = load i16, ptr addrspace(2) %arrayidx1, align 1121  %sub = sub nsw i16 %0, %1122  ret i16 %sub123}124 125define i16 @foo2(i16 %a, i16 %b) {126; CHECK-LABEL: foo2:127; CHECK:       ; %bb.0: ; %entry128; CHECK-NEXT:    lsl r24129; CHECK-NEXT:    rol r25130; CHECK-NEXT:    subi r24, lo8(-(arr2))131; CHECK-NEXT:    sbci r25, hi8(-(arr2))132; CHECK-NEXT:    movw r30, r24133; CHECK-NEXT:    ldi r18, 2134; CHECK-NEXT:    out 59, r18135; CHECK-NEXT:    elpm r24, Z+136; CHECK-NEXT:    elpm r25, Z137; CHECK-NEXT:    lsl r22138; CHECK-NEXT:    rol r23139; CHECK-NEXT:    subi r22, lo8(-(arr0))140; CHECK-NEXT:    sbci r23, hi8(-(arr0))141; CHECK-NEXT:    movw r30, r22142; CHECK-NEXT:    lpm r18, Z+143; CHECK-NEXT:    lpm r19, Z144; CHECK-NEXT:    sub r24, r18145; CHECK-NEXT:    sbc r25, r19146; CHECK-NEXT:    ret147;148; NOX-LABEL: foo2:149; NOX:       ; %bb.0: ; %entry150; NOX-NEXT:    lsl r24151; NOX-NEXT:    rol r25152; NOX-NEXT:    subi r24, lo8(-(arr2))153; NOX-NEXT:    sbci r25, hi8(-(arr2))154; NOX-NEXT:    movw r30, r24155; NOX-NEXT:    ldi r18, 2156; NOX-NEXT:    out 59, r18157; NOX-NEXT:    elpm158; NOX-NEXT:    mov r24, r0159; NOX-NEXT:    adiw r30, 1160; NOX-NEXT:    elpm161; NOX-NEXT:    mov r25, r0162; NOX-NEXT:    lsl r22163; NOX-NEXT:    rol r23164; NOX-NEXT:    subi r22, lo8(-(arr0))165; NOX-NEXT:    sbci r23, hi8(-(arr0))166; NOX-NEXT:    movw r30, r22167; NOX-NEXT:    lpm168; NOX-NEXT:    mov r18, r0169; NOX-NEXT:    adiw r30, 1170; NOX-NEXT:    lpm171; NOX-NEXT:    mov r19, r0172; NOX-NEXT:    sub r24, r18173; NOX-NEXT:    sbc r25, r19174; NOX-NEXT:    ret175entry:176  %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(3) @arr2, i16 0, i16 %a177  %0 = load i16, ptr addrspace(3) %arrayidx, align 1178  %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %b179  %1 = load i16, ptr addrspace(1) %arrayidx1, align 1180  %sub = sub nsw i16 %0, %1181  ret i16 %sub182}183 184define i16 @foo3(i16 %a, i16 %b) {185; CHECK-LABEL: foo3:186; CHECK:       ; %bb.0: ; %entry187; CHECK-NEXT:    lsl r22188; CHECK-NEXT:    rol r23189; CHECK-NEXT:    subi r22, lo8(-(arr1))190; CHECK-NEXT:    sbci r23, hi8(-(arr1))191; CHECK-NEXT:    movw r30, r22192; CHECK-NEXT:    ldi r18, 1193; CHECK-NEXT:    out 59, r18194; CHECK-NEXT:    elpm r20, Z+195; CHECK-NEXT:    elpm r21, Z196; CHECK-NEXT:    lsl r24197; CHECK-NEXT:    rol r25198; CHECK-NEXT:    subi r24, lo8(-(arr2))199; CHECK-NEXT:    sbci r25, hi8(-(arr2))200; CHECK-NEXT:    movw r30, r24201; CHECK-NEXT:    ldi r18, 2202; CHECK-NEXT:    out 59, r18203; CHECK-NEXT:    elpm r24, Z+204; CHECK-NEXT:    elpm r25, Z205; CHECK-NEXT:    sub r24, r20206; CHECK-NEXT:    sbc r25, r21207; CHECK-NEXT:    ret208;209; NOX-LABEL: foo3:210; NOX:       ; %bb.0: ; %entry211; NOX-NEXT:    lsl r22212; NOX-NEXT:    rol r23213; NOX-NEXT:    subi r22, lo8(-(arr1))214; NOX-NEXT:    sbci r23, hi8(-(arr1))215; NOX-NEXT:    movw r30, r22216; NOX-NEXT:    ldi r18, 1217; NOX-NEXT:    out 59, r18218; NOX-NEXT:    elpm219; NOX-NEXT:    mov r20, r0220; NOX-NEXT:    adiw r30, 1221; NOX-NEXT:    elpm222; NOX-NEXT:    mov r21, r0223; NOX-NEXT:    lsl r24224; NOX-NEXT:    rol r25225; NOX-NEXT:    subi r24, lo8(-(arr2))226; NOX-NEXT:    sbci r25, hi8(-(arr2))227; NOX-NEXT:    movw r30, r24228; NOX-NEXT:    ldi r18, 2229; NOX-NEXT:    out 59, r18230; NOX-NEXT:    elpm231; NOX-NEXT:    mov r24, r0232; NOX-NEXT:    adiw r30, 1233; NOX-NEXT:    elpm234; NOX-NEXT:    mov r25, r0235; NOX-NEXT:    sub r24, r20236; NOX-NEXT:    sbc r25, r21237; NOX-NEXT:    ret238entry:239  %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(3) @arr2, i16 0, i16 %a240  %0 = load i16, ptr addrspace(3) %arrayidx, align 1241  %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(2) @arr1, i16 0, i16 %b242  %1 = load i16, ptr addrspace(2) %arrayidx1, align 1243  %sub = sub nsw i16 %0, %1244  ret i16 %sub245}246 247@arrb1 = addrspace(1) constant [4 x i8] c"abcd", align 1248@arrb3 = addrspace(3) constant [4 x i8] c"1234", align 1249@arrb5 = addrspace(5) constant [4 x i8] c"HJLQ", align 1250 251define signext i8 @foob0(i16 %a, i16 %b) {252; CHECK-LABEL: foob0:253; CHECK:       ; %bb.0: ; %entry254; CHECK-NEXT:    subi r22, lo8(-(arrb1))255; CHECK-NEXT:    sbci r23, hi8(-(arrb1))256; CHECK-NEXT:    movw r30, r22257; CHECK-NEXT:    lpm r18, Z258; CHECK-NEXT:    subi r24, lo8(-(arrb1))259; CHECK-NEXT:    sbci r25, hi8(-(arrb1))260; CHECK-NEXT:    movw r30, r24261; CHECK-NEXT:    lpm r24, Z262; CHECK-NEXT:    sub r24, r18263; CHECK-NEXT:    mov r25, r24264; CHECK-NEXT:    lsl r25265; CHECK-NEXT:    sbc r25, r25266; CHECK-NEXT:    ret267;268; NOX-LABEL: foob0:269; NOX:       ; %bb.0: ; %entry270; NOX-NEXT:    subi r22, lo8(-(arrb1))271; NOX-NEXT:    sbci r23, hi8(-(arrb1))272; NOX-NEXT:    movw r30, r22273; NOX-NEXT:    lpm274; NOX-NEXT:    mov r18, r0275; NOX-NEXT:    subi r24, lo8(-(arrb1))276; NOX-NEXT:    sbci r25, hi8(-(arrb1))277; NOX-NEXT:    movw r30, r24278; NOX-NEXT:    lpm279; NOX-NEXT:    mov r24, r0280; NOX-NEXT:    sub r24, r18281; NOX-NEXT:    mov r25, r24282; NOX-NEXT:    lsl r25283; NOX-NEXT:    sbc r25, r25284; NOX-NEXT:    ret285entry:286  %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %a287  %0 = load i8, ptr addrspace(1) %arrayidx, align 1288  %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %b289  %1 = load i8, ptr addrspace(1) %arrayidx1, align 1290  %sub = sub i8 %0, %1291  ret i8 %sub292}293 294define signext i8 @foob1(i16 %a, i16 %b) {295; CHECK-LABEL: foob1:296; CHECK:       ; %bb.0: ; %entry297; CHECK-NEXT:    subi r22, lo8(-(arrb3))298; CHECK-NEXT:    sbci r23, hi8(-(arrb3))299; CHECK-NEXT:    movw r30, r22300; CHECK-NEXT:    ldi r18, 2301; CHECK-NEXT:    out 59, r18302; CHECK-NEXT:    elpm r18, Z303; CHECK-NEXT:    subi r24, lo8(-(arrb1))304; CHECK-NEXT:    sbci r25, hi8(-(arrb1))305; CHECK-NEXT:    movw r30, r24306; CHECK-NEXT:    lpm r24, Z307; CHECK-NEXT:    sub r24, r18308; CHECK-NEXT:    mov r25, r24309; CHECK-NEXT:    lsl r25310; CHECK-NEXT:    sbc r25, r25311; CHECK-NEXT:    ret312;313; NOX-LABEL: foob1:314; NOX:       ; %bb.0: ; %entry315; NOX-NEXT:    subi r22, lo8(-(arrb3))316; NOX-NEXT:    sbci r23, hi8(-(arrb3))317; NOX-NEXT:    movw r30, r22318; NOX-NEXT:    ldi r18, 2319; NOX-NEXT:    out 59, r18320; NOX-NEXT:    elpm321; NOX-NEXT:    mov r18, r0322; NOX-NEXT:    subi r24, lo8(-(arrb1))323; NOX-NEXT:    sbci r25, hi8(-(arrb1))324; NOX-NEXT:    movw r30, r24325; NOX-NEXT:    lpm326; NOX-NEXT:    mov r24, r0327; NOX-NEXT:    sub r24, r18328; NOX-NEXT:    mov r25, r24329; NOX-NEXT:    lsl r25330; NOX-NEXT:    sbc r25, r25331; NOX-NEXT:    ret332entry:333  %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %a334  %0 = load i8, ptr addrspace(1) %arrayidx, align 1335  %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %b336  %1 = load i8, ptr addrspace(3) %arrayidx1, align 1337  %sub = sub i8 %0, %1338  ret i8 %sub339}340 341define signext i8 @foob2(i16 %a, i16 %b) {342; CHECK-LABEL: foob2:343; CHECK:       ; %bb.0: ; %entry344; CHECK-NEXT:    subi r24, lo8(-(arrb5))345; CHECK-NEXT:    sbci r25, hi8(-(arrb5))346; CHECK-NEXT:    movw r30, r24347; CHECK-NEXT:    ldi r24, 4348; CHECK-NEXT:    out 59, r24349; CHECK-NEXT:    elpm r24, Z350; CHECK-NEXT:    subi r22, lo8(-(arrb1))351; CHECK-NEXT:    sbci r23, hi8(-(arrb1))352; CHECK-NEXT:    movw r30, r22353; CHECK-NEXT:    lpm r25, Z354; CHECK-NEXT:    sub r24, r25355; CHECK-NEXT:    mov r25, r24356; CHECK-NEXT:    lsl r25357; CHECK-NEXT:    sbc r25, r25358; CHECK-NEXT:    ret359;360; NOX-LABEL: foob2:361; NOX:       ; %bb.0: ; %entry362; NOX-NEXT:    subi r24, lo8(-(arrb5))363; NOX-NEXT:    sbci r25, hi8(-(arrb5))364; NOX-NEXT:    movw r30, r24365; NOX-NEXT:    ldi r24, 4366; NOX-NEXT:    out 59, r24367; NOX-NEXT:    elpm368; NOX-NEXT:    mov r24, r0369; NOX-NEXT:    subi r22, lo8(-(arrb1))370; NOX-NEXT:    sbci r23, hi8(-(arrb1))371; NOX-NEXT:    movw r30, r22372; NOX-NEXT:    lpm373; NOX-NEXT:    mov r25, r0374; NOX-NEXT:    sub r24, r25375; NOX-NEXT:    mov r25, r24376; NOX-NEXT:    lsl r25377; NOX-NEXT:    sbc r25, r25378; NOX-NEXT:    ret379entry:380  %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(5) @arrb5, i16 0, i16 %a381  %0 = load i8, ptr addrspace(5) %arrayidx, align 1382  %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %b383  %1 = load i8, ptr addrspace(1) %arrayidx1, align 1384  %sub = sub i8 %0, %1385  ret i8 %sub386}387 388define signext i8 @foob3(i16 %a, i16 %b) {389; CHECK-LABEL: foob3:390; CHECK:       ; %bb.0: ; %entry391; CHECK-NEXT:    subi r22, lo8(-(arrb5))392; CHECK-NEXT:    sbci r23, hi8(-(arrb5))393; CHECK-NEXT:    movw r30, r22394; CHECK-NEXT:    ldi r18, 4395; CHECK-NEXT:    out 59, r18396; CHECK-NEXT:    elpm r18, Z397; CHECK-NEXT:    subi r24, lo8(-(arrb3))398; CHECK-NEXT:    sbci r25, hi8(-(arrb3))399; CHECK-NEXT:    movw r30, r24400; CHECK-NEXT:    ldi r24, 2401; CHECK-NEXT:    out 59, r24402; CHECK-NEXT:    elpm r24, Z403; CHECK-NEXT:    sub r24, r18404; CHECK-NEXT:    mov r25, r24405; CHECK-NEXT:    lsl r25406; CHECK-NEXT:    sbc r25, r25407; CHECK-NEXT:    ret408;409; NOX-LABEL: foob3:410; NOX:       ; %bb.0: ; %entry411; NOX-NEXT:    subi r22, lo8(-(arrb5))412; NOX-NEXT:    sbci r23, hi8(-(arrb5))413; NOX-NEXT:    movw r30, r22414; NOX-NEXT:    ldi r18, 4415; NOX-NEXT:    out 59, r18416; NOX-NEXT:    elpm417; NOX-NEXT:    mov r18, r0418; NOX-NEXT:    subi r24, lo8(-(arrb3))419; NOX-NEXT:    sbci r25, hi8(-(arrb3))420; NOX-NEXT:    movw r30, r24421; NOX-NEXT:    ldi r24, 2422; NOX-NEXT:    out 59, r24423; NOX-NEXT:    elpm424; NOX-NEXT:    mov r24, r0425; NOX-NEXT:    sub r24, r18426; NOX-NEXT:    mov r25, r24427; NOX-NEXT:    lsl r25428; NOX-NEXT:    sbc r25, r25429; NOX-NEXT:    ret430entry:431  %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %a432  %0 = load i8, ptr addrspace(3) %arrayidx, align 1433  %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(5) @arrb5, i16 0, i16 %b434  %1 = load i8, ptr addrspace(5) %arrayidx1, align 1435  %sub = sub i8 %0, %1436  ret i8 %sub437}438 439define signext i8 @foob4(i16 %a, i16 %b) {440; CHECK-LABEL: foob4:441; CHECK:       ; %bb.0: ; %entry442; CHECK-NEXT:    subi r22, lo8(-(arrb3))443; CHECK-NEXT:    sbci r23, hi8(-(arrb3))444; CHECK-NEXT:    movw r30, r22445; CHECK-NEXT:    ldi r18, 2446; CHECK-NEXT:    out 59, r18447; CHECK-NEXT:    elpm r19, Z448; CHECK-NEXT:    subi r24, lo8(-(arrb3))449; CHECK-NEXT:    sbci r25, hi8(-(arrb3))450; CHECK-NEXT:    movw r30, r24451; CHECK-NEXT:    out 59, r18452; CHECK-NEXT:    elpm r24, Z453; CHECK-NEXT:    sub r24, r19454; CHECK-NEXT:    mov r25, r24455; CHECK-NEXT:    lsl r25456; CHECK-NEXT:    sbc r25, r25457; CHECK-NEXT:    ret458;459; NOX-LABEL: foob4:460; NOX:       ; %bb.0: ; %entry461; NOX-NEXT:    subi r22, lo8(-(arrb3))462; NOX-NEXT:    sbci r23, hi8(-(arrb3))463; NOX-NEXT:    movw r30, r22464; NOX-NEXT:    ldi r18, 2465; NOX-NEXT:    out 59, r18466; NOX-NEXT:    elpm467; NOX-NEXT:    mov r19, r0468; NOX-NEXT:    subi r24, lo8(-(arrb3))469; NOX-NEXT:    sbci r25, hi8(-(arrb3))470; NOX-NEXT:    movw r30, r24471; NOX-NEXT:    out 59, r18472; NOX-NEXT:    elpm473; NOX-NEXT:    mov r24, r0474; NOX-NEXT:    sub r24, r19475; NOX-NEXT:    mov r25, r24476; NOX-NEXT:    lsl r25477; NOX-NEXT:    sbc r25, r25478; NOX-NEXT:    ret479entry:480  %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %a481  %0 = load i8, ptr addrspace(3) %arrayidx, align 1482  %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %b483  %1 = load i8, ptr addrspace(3) %arrayidx1, align 1484  %sub = sub i8 %0, %1485  ret i8 %sub486}487