194173dc2SBen Shi; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 24fa9dc94SBen Shi; RUN: llc < %s -mtriple=avr -mattr=+movw -mattr=+elpm -mattr=+elpmx -mattr=+lpm -mattr=+lpmx -verify-machineinstrs \ 34fa9dc94SBen Shi; RUN: | FileCheck %s 44fa9dc94SBen Shi; RUN: llc < %s -mtriple=avr -mattr=+movw -mattr=+elpm -mattr=-elpmx -mattr=+lpm -mattr=-lpmx -verify-machineinstrs \ 54fa9dc94SBen Shi; RUN: | FileCheck --check-prefix=NOX %s 694173dc2SBen Shi 794173dc2SBen Shi@arr0 = addrspace(1) constant [4 x i16] [i16 123, i16 24, i16 56, i16 37], align 1 894173dc2SBen Shi@arr1 = addrspace(2) constant [4 x i16] [i16 123, i16 34, i16 46, i16 27], align 1 994173dc2SBen Shi@arr2 = addrspace(3) constant [4 x i16] [i16 123, i16 23, i16 45, i16 17], align 1 1094173dc2SBen Shi 1194173dc2SBen Shidefine i16 @foo0(i16 %a, i16 %b) { 1294173dc2SBen Shi; CHECK-LABEL: foo0: 1394173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 1494173dc2SBen Shi; CHECK-NEXT: lsl r22 1594173dc2SBen Shi; CHECK-NEXT: rol r23 16c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arr0)) 17c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arr0)) 1894173dc2SBen Shi; CHECK-NEXT: movw r30, r22 1994173dc2SBen Shi; CHECK-NEXT: lpm r18, Z+ 2094173dc2SBen Shi; CHECK-NEXT: lpm r19, Z 2194173dc2SBen Shi; CHECK-NEXT: lsl r24 2294173dc2SBen Shi; CHECK-NEXT: rol r25 23c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arr0)) 24c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arr0)) 2594173dc2SBen Shi; CHECK-NEXT: movw r30, r24 2694173dc2SBen Shi; CHECK-NEXT: lpm r24, Z+ 2794173dc2SBen Shi; CHECK-NEXT: lpm r25, Z 2894173dc2SBen Shi; CHECK-NEXT: sub r24, r18 2994173dc2SBen Shi; CHECK-NEXT: sbc r25, r19 3094173dc2SBen Shi; CHECK-NEXT: ret 31acb4d143SBen Shi; 32acb4d143SBen Shi; NOX-LABEL: foo0: 33acb4d143SBen Shi; NOX: ; %bb.0: ; %entry 34acb4d143SBen Shi; NOX-NEXT: lsl r22 35acb4d143SBen Shi; NOX-NEXT: rol r23 36acb4d143SBen Shi; NOX-NEXT: subi r22, lo8(-(arr0)) 37acb4d143SBen Shi; NOX-NEXT: sbci r23, hi8(-(arr0)) 38acb4d143SBen Shi; NOX-NEXT: movw r30, r22 39acb4d143SBen Shi; NOX-NEXT: lpm 40acb4d143SBen Shi; NOX-NEXT: mov r18, r0 41acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 42acb4d143SBen Shi; NOX-NEXT: lpm 43acb4d143SBen Shi; NOX-NEXT: mov r19, r0 44acb4d143SBen Shi; NOX-NEXT: lsl r24 45acb4d143SBen Shi; NOX-NEXT: rol r25 46acb4d143SBen Shi; NOX-NEXT: subi r24, lo8(-(arr0)) 47acb4d143SBen Shi; NOX-NEXT: sbci r25, hi8(-(arr0)) 48acb4d143SBen Shi; NOX-NEXT: movw r30, r24 49acb4d143SBen Shi; NOX-NEXT: lpm 50acb4d143SBen Shi; NOX-NEXT: mov r24, r0 51acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 52acb4d143SBen Shi; NOX-NEXT: lpm 53acb4d143SBen Shi; NOX-NEXT: mov r25, r0 54acb4d143SBen Shi; NOX-NEXT: sub r24, r18 55acb4d143SBen Shi; NOX-NEXT: sbc r25, r19 56acb4d143SBen Shi; NOX-NEXT: ret 5794173dc2SBen Shientry: 58*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %a 59*7bdc80f3SNikita Popov %0 = load i16, ptr addrspace(1) %arrayidx, align 1 60*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %b 61*7bdc80f3SNikita Popov %1 = load i16, ptr addrspace(1) %arrayidx1, align 1 6294173dc2SBen Shi %sub = sub nsw i16 %0, %1 6394173dc2SBen Shi ret i16 %sub 6494173dc2SBen Shi} 6594173dc2SBen Shi 6694173dc2SBen Shidefine i16 @foo1(i16 %a, i16 %b) { 6794173dc2SBen Shi; CHECK-LABEL: foo1: 6894173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 6994173dc2SBen Shi; CHECK-NEXT: lsl r22 7094173dc2SBen Shi; CHECK-NEXT: rol r23 71c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arr1)) 72c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arr1)) 7394173dc2SBen Shi; CHECK-NEXT: movw r30, r22 7494173dc2SBen Shi; CHECK-NEXT: ldi r18, 1 7594173dc2SBen Shi; CHECK-NEXT: out 59, r18 7691ae1afdSAyke van Laethem; CHECK-NEXT: elpm r20, Z+ 7791ae1afdSAyke van Laethem; CHECK-NEXT: elpm r21, Z 7894173dc2SBen Shi; CHECK-NEXT: lsl r24 7994173dc2SBen Shi; CHECK-NEXT: rol r25 80c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arr0)) 81c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arr0)) 8294173dc2SBen Shi; CHECK-NEXT: movw r30, r24 8394173dc2SBen Shi; CHECK-NEXT: lpm r24, Z+ 8494173dc2SBen Shi; CHECK-NEXT: lpm r25, Z 8591ae1afdSAyke van Laethem; CHECK-NEXT: sub r24, r20 8691ae1afdSAyke van Laethem; CHECK-NEXT: sbc r25, r21 8794173dc2SBen Shi; CHECK-NEXT: ret 88acb4d143SBen Shi; 89acb4d143SBen Shi; NOX-LABEL: foo1: 90acb4d143SBen Shi; NOX: ; %bb.0: ; %entry 91acb4d143SBen Shi; NOX-NEXT: lsl r22 92acb4d143SBen Shi; NOX-NEXT: rol r23 93acb4d143SBen Shi; NOX-NEXT: subi r22, lo8(-(arr1)) 94acb4d143SBen Shi; NOX-NEXT: sbci r23, hi8(-(arr1)) 95acb4d143SBen Shi; NOX-NEXT: movw r30, r22 96acb4d143SBen Shi; NOX-NEXT: ldi r18, 1 97acb4d143SBen Shi; NOX-NEXT: out 59, r18 98acb4d143SBen Shi; NOX-NEXT: elpm 99acb4d143SBen Shi; NOX-NEXT: mov r20, r0 100acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 101acb4d143SBen Shi; NOX-NEXT: elpm 102acb4d143SBen Shi; NOX-NEXT: mov r21, r0 103acb4d143SBen Shi; NOX-NEXT: lsl r24 104acb4d143SBen Shi; NOX-NEXT: rol r25 105acb4d143SBen Shi; NOX-NEXT: subi r24, lo8(-(arr0)) 106acb4d143SBen Shi; NOX-NEXT: sbci r25, hi8(-(arr0)) 107acb4d143SBen Shi; NOX-NEXT: movw r30, r24 108acb4d143SBen Shi; NOX-NEXT: lpm 109acb4d143SBen Shi; NOX-NEXT: mov r24, r0 110acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 111acb4d143SBen Shi; NOX-NEXT: lpm 112acb4d143SBen Shi; NOX-NEXT: mov r25, r0 113acb4d143SBen Shi; NOX-NEXT: sub r24, r20 114acb4d143SBen Shi; NOX-NEXT: sbc r25, r21 115acb4d143SBen Shi; NOX-NEXT: ret 11694173dc2SBen Shientry: 117*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %a 118*7bdc80f3SNikita Popov %0 = load i16, ptr addrspace(1) %arrayidx, align 1 119*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(2) @arr1, i16 0, i16 %b 120*7bdc80f3SNikita Popov %1 = load i16, ptr addrspace(2) %arrayidx1, align 1 12194173dc2SBen Shi %sub = sub nsw i16 %0, %1 12294173dc2SBen Shi ret i16 %sub 12394173dc2SBen Shi} 12494173dc2SBen Shi 12594173dc2SBen Shidefine i16 @foo2(i16 %a, i16 %b) { 12694173dc2SBen Shi; CHECK-LABEL: foo2: 12794173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 12894173dc2SBen Shi; CHECK-NEXT: lsl r24 12994173dc2SBen Shi; CHECK-NEXT: rol r25 130c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arr2)) 131c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arr2)) 13294173dc2SBen Shi; CHECK-NEXT: movw r30, r24 13391ae1afdSAyke van Laethem; CHECK-NEXT: ldi r18, 2 13491ae1afdSAyke van Laethem; CHECK-NEXT: out 59, r18 13594173dc2SBen Shi; CHECK-NEXT: elpm r24, Z+ 13694173dc2SBen Shi; CHECK-NEXT: elpm r25, Z 13794173dc2SBen Shi; CHECK-NEXT: lsl r22 13894173dc2SBen Shi; CHECK-NEXT: rol r23 139c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arr0)) 140c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arr0)) 14194173dc2SBen Shi; CHECK-NEXT: movw r30, r22 14294173dc2SBen Shi; CHECK-NEXT: lpm r18, Z+ 14394173dc2SBen Shi; CHECK-NEXT: lpm r19, Z 14494173dc2SBen Shi; CHECK-NEXT: sub r24, r18 14594173dc2SBen Shi; CHECK-NEXT: sbc r25, r19 14694173dc2SBen Shi; CHECK-NEXT: ret 147acb4d143SBen Shi; 148acb4d143SBen Shi; NOX-LABEL: foo2: 149acb4d143SBen Shi; NOX: ; %bb.0: ; %entry 150acb4d143SBen Shi; NOX-NEXT: lsl r24 151acb4d143SBen Shi; NOX-NEXT: rol r25 152acb4d143SBen Shi; NOX-NEXT: subi r24, lo8(-(arr2)) 153acb4d143SBen Shi; NOX-NEXT: sbci r25, hi8(-(arr2)) 154acb4d143SBen Shi; NOX-NEXT: movw r30, r24 155acb4d143SBen Shi; NOX-NEXT: ldi r18, 2 156acb4d143SBen Shi; NOX-NEXT: out 59, r18 157acb4d143SBen Shi; NOX-NEXT: elpm 158acb4d143SBen Shi; NOX-NEXT: mov r24, r0 159acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 160acb4d143SBen Shi; NOX-NEXT: elpm 161acb4d143SBen Shi; NOX-NEXT: mov r25, r0 162acb4d143SBen Shi; NOX-NEXT: lsl r22 163acb4d143SBen Shi; NOX-NEXT: rol r23 164acb4d143SBen Shi; NOX-NEXT: subi r22, lo8(-(arr0)) 165acb4d143SBen Shi; NOX-NEXT: sbci r23, hi8(-(arr0)) 166acb4d143SBen Shi; NOX-NEXT: movw r30, r22 167acb4d143SBen Shi; NOX-NEXT: lpm 168acb4d143SBen Shi; NOX-NEXT: mov r18, r0 169acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 170acb4d143SBen Shi; NOX-NEXT: lpm 171acb4d143SBen Shi; NOX-NEXT: mov r19, r0 172acb4d143SBen Shi; NOX-NEXT: sub r24, r18 173acb4d143SBen Shi; NOX-NEXT: sbc r25, r19 174acb4d143SBen Shi; NOX-NEXT: ret 17594173dc2SBen Shientry: 176*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(3) @arr2, i16 0, i16 %a 177*7bdc80f3SNikita Popov %0 = load i16, ptr addrspace(3) %arrayidx, align 1 178*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(1) @arr0, i16 0, i16 %b 179*7bdc80f3SNikita Popov %1 = load i16, ptr addrspace(1) %arrayidx1, align 1 18094173dc2SBen Shi %sub = sub nsw i16 %0, %1 18194173dc2SBen Shi ret i16 %sub 18294173dc2SBen Shi} 18394173dc2SBen Shi 18494173dc2SBen Shidefine i16 @foo3(i16 %a, i16 %b) { 18594173dc2SBen Shi; CHECK-LABEL: foo3: 18694173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 18794173dc2SBen Shi; CHECK-NEXT: lsl r22 18894173dc2SBen Shi; CHECK-NEXT: rol r23 189c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arr1)) 190c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arr1)) 19194173dc2SBen Shi; CHECK-NEXT: movw r30, r22 19294173dc2SBen Shi; CHECK-NEXT: ldi r18, 1 19394173dc2SBen Shi; CHECK-NEXT: out 59, r18 19491ae1afdSAyke van Laethem; CHECK-NEXT: elpm r20, Z+ 19591ae1afdSAyke van Laethem; CHECK-NEXT: elpm r21, Z 19694173dc2SBen Shi; CHECK-NEXT: lsl r24 19794173dc2SBen Shi; CHECK-NEXT: rol r25 198c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arr2)) 199c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arr2)) 20094173dc2SBen Shi; CHECK-NEXT: movw r30, r24 20191ae1afdSAyke van Laethem; CHECK-NEXT: ldi r18, 2 20291ae1afdSAyke van Laethem; CHECK-NEXT: out 59, r18 20394173dc2SBen Shi; CHECK-NEXT: elpm r24, Z+ 20494173dc2SBen Shi; CHECK-NEXT: elpm r25, Z 20591ae1afdSAyke van Laethem; CHECK-NEXT: sub r24, r20 20691ae1afdSAyke van Laethem; CHECK-NEXT: sbc r25, r21 20794173dc2SBen Shi; CHECK-NEXT: ret 208acb4d143SBen Shi; 209acb4d143SBen Shi; NOX-LABEL: foo3: 210acb4d143SBen Shi; NOX: ; %bb.0: ; %entry 211acb4d143SBen Shi; NOX-NEXT: lsl r22 212acb4d143SBen Shi; NOX-NEXT: rol r23 213acb4d143SBen Shi; NOX-NEXT: subi r22, lo8(-(arr1)) 214acb4d143SBen Shi; NOX-NEXT: sbci r23, hi8(-(arr1)) 215acb4d143SBen Shi; NOX-NEXT: movw r30, r22 216acb4d143SBen Shi; NOX-NEXT: ldi r18, 1 217acb4d143SBen Shi; NOX-NEXT: out 59, r18 218acb4d143SBen Shi; NOX-NEXT: elpm 219acb4d143SBen Shi; NOX-NEXT: mov r20, r0 220acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 221acb4d143SBen Shi; NOX-NEXT: elpm 222acb4d143SBen Shi; NOX-NEXT: mov r21, r0 223acb4d143SBen Shi; NOX-NEXT: lsl r24 224acb4d143SBen Shi; NOX-NEXT: rol r25 225acb4d143SBen Shi; NOX-NEXT: subi r24, lo8(-(arr2)) 226acb4d143SBen Shi; NOX-NEXT: sbci r25, hi8(-(arr2)) 227acb4d143SBen Shi; NOX-NEXT: movw r30, r24 228acb4d143SBen Shi; NOX-NEXT: ldi r18, 2 229acb4d143SBen Shi; NOX-NEXT: out 59, r18 230acb4d143SBen Shi; NOX-NEXT: elpm 231acb4d143SBen Shi; NOX-NEXT: mov r24, r0 232acb4d143SBen Shi; NOX-NEXT: adiw r30, 1 233acb4d143SBen Shi; NOX-NEXT: elpm 234acb4d143SBen Shi; NOX-NEXT: mov r25, r0 235acb4d143SBen Shi; NOX-NEXT: sub r24, r20 236acb4d143SBen Shi; NOX-NEXT: sbc r25, r21 237acb4d143SBen Shi; NOX-NEXT: ret 23894173dc2SBen Shientry: 239*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i16], ptr addrspace(3) @arr2, i16 0, i16 %a 240*7bdc80f3SNikita Popov %0 = load i16, ptr addrspace(3) %arrayidx, align 1 241*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i16], ptr addrspace(2) @arr1, i16 0, i16 %b 242*7bdc80f3SNikita Popov %1 = load i16, ptr addrspace(2) %arrayidx1, align 1 24394173dc2SBen Shi %sub = sub nsw i16 %0, %1 24494173dc2SBen Shi ret i16 %sub 24594173dc2SBen Shi} 24694173dc2SBen Shi 2474fa9dc94SBen Shi@arrb1 = addrspace(1) constant [4 x i8] c"abcd", align 1 2484fa9dc94SBen Shi@arrb3 = addrspace(3) constant [4 x i8] c"1234", align 1 2494fa9dc94SBen Shi@arrb5 = addrspace(5) constant [4 x i8] c"HJLQ", align 1 25094173dc2SBen Shi 25194173dc2SBen Shidefine signext i8 @foob0(i16 %a, i16 %b) { 25294173dc2SBen Shi; CHECK-LABEL: foob0: 25394173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 254c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arrb1)) 255c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arrb1)) 25694173dc2SBen Shi; CHECK-NEXT: movw r30, r22 25794173dc2SBen Shi; CHECK-NEXT: lpm r18, Z 258c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arrb1)) 259c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arrb1)) 26094173dc2SBen Shi; CHECK-NEXT: movw r30, r24 26194173dc2SBen Shi; CHECK-NEXT: lpm r24, Z 26294173dc2SBen Shi; CHECK-NEXT: sub r24, r18 26394173dc2SBen Shi; CHECK-NEXT: mov r25, r24 26494173dc2SBen Shi; CHECK-NEXT: lsl r25 26594173dc2SBen Shi; CHECK-NEXT: sbc r25, r25 26694173dc2SBen Shi; CHECK-NEXT: ret 2672a6e39dbSBen Shi; 2682a6e39dbSBen Shi; NOX-LABEL: foob0: 2692a6e39dbSBen Shi; NOX: ; %bb.0: ; %entry 2702a6e39dbSBen Shi; NOX-NEXT: subi r22, lo8(-(arrb1)) 2712a6e39dbSBen Shi; NOX-NEXT: sbci r23, hi8(-(arrb1)) 2722a6e39dbSBen Shi; NOX-NEXT: movw r30, r22 2732a6e39dbSBen Shi; NOX-NEXT: lpm 2742a6e39dbSBen Shi; NOX-NEXT: mov r18, r0 2752a6e39dbSBen Shi; NOX-NEXT: subi r24, lo8(-(arrb1)) 2762a6e39dbSBen Shi; NOX-NEXT: sbci r25, hi8(-(arrb1)) 2772a6e39dbSBen Shi; NOX-NEXT: movw r30, r24 2782a6e39dbSBen Shi; NOX-NEXT: lpm 2792a6e39dbSBen Shi; NOX-NEXT: mov r24, r0 2802a6e39dbSBen Shi; NOX-NEXT: sub r24, r18 2812a6e39dbSBen Shi; NOX-NEXT: mov r25, r24 2822a6e39dbSBen Shi; NOX-NEXT: lsl r25 2832a6e39dbSBen Shi; NOX-NEXT: sbc r25, r25 2842a6e39dbSBen Shi; NOX-NEXT: ret 28594173dc2SBen Shientry: 286*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %a 287*7bdc80f3SNikita Popov %0 = load i8, ptr addrspace(1) %arrayidx, align 1 288*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %b 289*7bdc80f3SNikita Popov %1 = load i8, ptr addrspace(1) %arrayidx1, align 1 29094173dc2SBen Shi %sub = sub i8 %0, %1 29194173dc2SBen Shi ret i8 %sub 29294173dc2SBen Shi} 29394173dc2SBen Shi 29494173dc2SBen Shidefine signext i8 @foob1(i16 %a, i16 %b) { 29594173dc2SBen Shi; CHECK-LABEL: foob1: 29694173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 297c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arrb3)) 298c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arrb3)) 29994173dc2SBen Shi; CHECK-NEXT: movw r30, r22 30094173dc2SBen Shi; CHECK-NEXT: ldi r18, 2 30194173dc2SBen Shi; CHECK-NEXT: out 59, r18 30294173dc2SBen Shi; CHECK-NEXT: elpm r18, Z 303c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arrb1)) 304c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arrb1)) 30594173dc2SBen Shi; CHECK-NEXT: movw r30, r24 30694173dc2SBen Shi; CHECK-NEXT: lpm r24, Z 30794173dc2SBen Shi; CHECK-NEXT: sub r24, r18 30894173dc2SBen Shi; CHECK-NEXT: mov r25, r24 30994173dc2SBen Shi; CHECK-NEXT: lsl r25 31094173dc2SBen Shi; CHECK-NEXT: sbc r25, r25 31194173dc2SBen Shi; CHECK-NEXT: ret 3122a6e39dbSBen Shi; 3132a6e39dbSBen Shi; NOX-LABEL: foob1: 3142a6e39dbSBen Shi; NOX: ; %bb.0: ; %entry 3152a6e39dbSBen Shi; NOX-NEXT: subi r22, lo8(-(arrb3)) 3162a6e39dbSBen Shi; NOX-NEXT: sbci r23, hi8(-(arrb3)) 3172a6e39dbSBen Shi; NOX-NEXT: movw r30, r22 3182a6e39dbSBen Shi; NOX-NEXT: ldi r18, 2 3192a6e39dbSBen Shi; NOX-NEXT: out 59, r18 3202a6e39dbSBen Shi; NOX-NEXT: elpm 3212a6e39dbSBen Shi; NOX-NEXT: mov r18, r0 3222a6e39dbSBen Shi; NOX-NEXT: subi r24, lo8(-(arrb1)) 3232a6e39dbSBen Shi; NOX-NEXT: sbci r25, hi8(-(arrb1)) 3242a6e39dbSBen Shi; NOX-NEXT: movw r30, r24 3252a6e39dbSBen Shi; NOX-NEXT: lpm 3262a6e39dbSBen Shi; NOX-NEXT: mov r24, r0 3272a6e39dbSBen Shi; NOX-NEXT: sub r24, r18 3282a6e39dbSBen Shi; NOX-NEXT: mov r25, r24 3292a6e39dbSBen Shi; NOX-NEXT: lsl r25 3302a6e39dbSBen Shi; NOX-NEXT: sbc r25, r25 3312a6e39dbSBen Shi; NOX-NEXT: ret 33294173dc2SBen Shientry: 333*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %a 334*7bdc80f3SNikita Popov %0 = load i8, ptr addrspace(1) %arrayidx, align 1 335*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %b 336*7bdc80f3SNikita Popov %1 = load i8, ptr addrspace(3) %arrayidx1, align 1 33794173dc2SBen Shi %sub = sub i8 %0, %1 33894173dc2SBen Shi ret i8 %sub 33994173dc2SBen Shi} 34094173dc2SBen Shi 34194173dc2SBen Shidefine signext i8 @foob2(i16 %a, i16 %b) { 34294173dc2SBen Shi; CHECK-LABEL: foob2: 34394173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 344c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arrb5)) 345c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arrb5)) 34694173dc2SBen Shi; CHECK-NEXT: movw r30, r24 34794173dc2SBen Shi; CHECK-NEXT: ldi r24, 4 34894173dc2SBen Shi; CHECK-NEXT: out 59, r24 34994173dc2SBen Shi; CHECK-NEXT: elpm r24, Z 350c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arrb1)) 351c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arrb1)) 35294173dc2SBen Shi; CHECK-NEXT: movw r30, r22 35394173dc2SBen Shi; CHECK-NEXT: lpm r25, Z 35494173dc2SBen Shi; CHECK-NEXT: sub r24, r25 35594173dc2SBen Shi; CHECK-NEXT: mov r25, r24 35694173dc2SBen Shi; CHECK-NEXT: lsl r25 35794173dc2SBen Shi; CHECK-NEXT: sbc r25, r25 35894173dc2SBen Shi; CHECK-NEXT: ret 3592a6e39dbSBen Shi; 3602a6e39dbSBen Shi; NOX-LABEL: foob2: 3612a6e39dbSBen Shi; NOX: ; %bb.0: ; %entry 3622a6e39dbSBen Shi; NOX-NEXT: subi r24, lo8(-(arrb5)) 3632a6e39dbSBen Shi; NOX-NEXT: sbci r25, hi8(-(arrb5)) 3642a6e39dbSBen Shi; NOX-NEXT: movw r30, r24 3652a6e39dbSBen Shi; NOX-NEXT: ldi r24, 4 3662a6e39dbSBen Shi; NOX-NEXT: out 59, r24 3672a6e39dbSBen Shi; NOX-NEXT: elpm 3682a6e39dbSBen Shi; NOX-NEXT: mov r24, r0 3692a6e39dbSBen Shi; NOX-NEXT: subi r22, lo8(-(arrb1)) 3702a6e39dbSBen Shi; NOX-NEXT: sbci r23, hi8(-(arrb1)) 3712a6e39dbSBen Shi; NOX-NEXT: movw r30, r22 3722a6e39dbSBen Shi; NOX-NEXT: lpm 3732a6e39dbSBen Shi; NOX-NEXT: mov r25, r0 3742a6e39dbSBen Shi; NOX-NEXT: sub r24, r25 3752a6e39dbSBen Shi; NOX-NEXT: mov r25, r24 3762a6e39dbSBen Shi; NOX-NEXT: lsl r25 3772a6e39dbSBen Shi; NOX-NEXT: sbc r25, r25 3782a6e39dbSBen Shi; NOX-NEXT: ret 37994173dc2SBen Shientry: 380*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(5) @arrb5, i16 0, i16 %a 381*7bdc80f3SNikita Popov %0 = load i8, ptr addrspace(5) %arrayidx, align 1 382*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(1) @arrb1, i16 0, i16 %b 383*7bdc80f3SNikita Popov %1 = load i8, ptr addrspace(1) %arrayidx1, align 1 38494173dc2SBen Shi %sub = sub i8 %0, %1 38594173dc2SBen Shi ret i8 %sub 38694173dc2SBen Shi} 38794173dc2SBen Shi 38894173dc2SBen Shidefine signext i8 @foob3(i16 %a, i16 %b) { 38994173dc2SBen Shi; CHECK-LABEL: foob3: 39094173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 391c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arrb5)) 392c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arrb5)) 39394173dc2SBen Shi; CHECK-NEXT: movw r30, r22 39494173dc2SBen Shi; CHECK-NEXT: ldi r18, 4 39594173dc2SBen Shi; CHECK-NEXT: out 59, r18 39694173dc2SBen Shi; CHECK-NEXT: elpm r18, Z 397c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arrb3)) 398c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arrb3)) 39994173dc2SBen Shi; CHECK-NEXT: movw r30, r24 40094173dc2SBen Shi; CHECK-NEXT: ldi r24, 2 40194173dc2SBen Shi; CHECK-NEXT: out 59, r24 40294173dc2SBen Shi; CHECK-NEXT: elpm r24, Z 40394173dc2SBen Shi; CHECK-NEXT: sub r24, r18 40494173dc2SBen Shi; CHECK-NEXT: mov r25, r24 40594173dc2SBen Shi; CHECK-NEXT: lsl r25 40694173dc2SBen Shi; CHECK-NEXT: sbc r25, r25 40794173dc2SBen Shi; CHECK-NEXT: ret 4084fa9dc94SBen Shi; 4094fa9dc94SBen Shi; NOX-LABEL: foob3: 4104fa9dc94SBen Shi; NOX: ; %bb.0: ; %entry 4114fa9dc94SBen Shi; NOX-NEXT: subi r22, lo8(-(arrb5)) 4124fa9dc94SBen Shi; NOX-NEXT: sbci r23, hi8(-(arrb5)) 4134fa9dc94SBen Shi; NOX-NEXT: movw r30, r22 4144fa9dc94SBen Shi; NOX-NEXT: ldi r18, 4 4154fa9dc94SBen Shi; NOX-NEXT: out 59, r18 4164fa9dc94SBen Shi; NOX-NEXT: elpm 4174fa9dc94SBen Shi; NOX-NEXT: mov r18, r0 4184fa9dc94SBen Shi; NOX-NEXT: subi r24, lo8(-(arrb3)) 4194fa9dc94SBen Shi; NOX-NEXT: sbci r25, hi8(-(arrb3)) 4204fa9dc94SBen Shi; NOX-NEXT: movw r30, r24 4214fa9dc94SBen Shi; NOX-NEXT: ldi r24, 2 4224fa9dc94SBen Shi; NOX-NEXT: out 59, r24 4234fa9dc94SBen Shi; NOX-NEXT: elpm 4244fa9dc94SBen Shi; NOX-NEXT: mov r24, r0 4254fa9dc94SBen Shi; NOX-NEXT: sub r24, r18 4264fa9dc94SBen Shi; NOX-NEXT: mov r25, r24 4274fa9dc94SBen Shi; NOX-NEXT: lsl r25 4284fa9dc94SBen Shi; NOX-NEXT: sbc r25, r25 4294fa9dc94SBen Shi; NOX-NEXT: ret 43094173dc2SBen Shientry: 431*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %a 432*7bdc80f3SNikita Popov %0 = load i8, ptr addrspace(3) %arrayidx, align 1 433*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(5) @arrb5, i16 0, i16 %b 434*7bdc80f3SNikita Popov %1 = load i8, ptr addrspace(5) %arrayidx1, align 1 43594173dc2SBen Shi %sub = sub i8 %0, %1 43694173dc2SBen Shi ret i8 %sub 43794173dc2SBen Shi} 43894173dc2SBen Shi 43994173dc2SBen Shidefine signext i8 @foob4(i16 %a, i16 %b) { 44094173dc2SBen Shi; CHECK-LABEL: foob4: 44194173dc2SBen Shi; CHECK: ; %bb.0: ; %entry 442c41d4250SBen Shi; CHECK-NEXT: subi r22, lo8(-(arrb3)) 443c41d4250SBen Shi; CHECK-NEXT: sbci r23, hi8(-(arrb3)) 44494173dc2SBen Shi; CHECK-NEXT: movw r30, r22 44594173dc2SBen Shi; CHECK-NEXT: ldi r18, 2 44694173dc2SBen Shi; CHECK-NEXT: out 59, r18 44794173dc2SBen Shi; CHECK-NEXT: elpm r19, Z 448c41d4250SBen Shi; CHECK-NEXT: subi r24, lo8(-(arrb3)) 449c41d4250SBen Shi; CHECK-NEXT: sbci r25, hi8(-(arrb3)) 45094173dc2SBen Shi; CHECK-NEXT: movw r30, r24 45194173dc2SBen Shi; CHECK-NEXT: out 59, r18 45294173dc2SBen Shi; CHECK-NEXT: elpm r24, Z 45394173dc2SBen Shi; CHECK-NEXT: sub r24, r19 45494173dc2SBen Shi; CHECK-NEXT: mov r25, r24 45594173dc2SBen Shi; CHECK-NEXT: lsl r25 45694173dc2SBen Shi; CHECK-NEXT: sbc r25, r25 45794173dc2SBen Shi; CHECK-NEXT: ret 4584fa9dc94SBen Shi; 4594fa9dc94SBen Shi; NOX-LABEL: foob4: 4604fa9dc94SBen Shi; NOX: ; %bb.0: ; %entry 4614fa9dc94SBen Shi; NOX-NEXT: subi r22, lo8(-(arrb3)) 4624fa9dc94SBen Shi; NOX-NEXT: sbci r23, hi8(-(arrb3)) 4634fa9dc94SBen Shi; NOX-NEXT: movw r30, r22 4644fa9dc94SBen Shi; NOX-NEXT: ldi r18, 2 4654fa9dc94SBen Shi; NOX-NEXT: out 59, r18 4664fa9dc94SBen Shi; NOX-NEXT: elpm 4674fa9dc94SBen Shi; NOX-NEXT: mov r19, r0 4684fa9dc94SBen Shi; NOX-NEXT: subi r24, lo8(-(arrb3)) 4694fa9dc94SBen Shi; NOX-NEXT: sbci r25, hi8(-(arrb3)) 4704fa9dc94SBen Shi; NOX-NEXT: movw r30, r24 4714fa9dc94SBen Shi; NOX-NEXT: out 59, r18 4724fa9dc94SBen Shi; NOX-NEXT: elpm 4734fa9dc94SBen Shi; NOX-NEXT: mov r24, r0 4744fa9dc94SBen Shi; NOX-NEXT: sub r24, r19 4754fa9dc94SBen Shi; NOX-NEXT: mov r25, r24 4764fa9dc94SBen Shi; NOX-NEXT: lsl r25 4774fa9dc94SBen Shi; NOX-NEXT: sbc r25, r25 4784fa9dc94SBen Shi; NOX-NEXT: ret 47994173dc2SBen Shientry: 480*7bdc80f3SNikita Popov %arrayidx = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %a 481*7bdc80f3SNikita Popov %0 = load i8, ptr addrspace(3) %arrayidx, align 1 482*7bdc80f3SNikita Popov %arrayidx1 = getelementptr inbounds [4 x i8], ptr addrspace(3) @arrb3, i16 0, i16 %b 483*7bdc80f3SNikita Popov %1 = load i8, ptr addrspace(3) %arrayidx1, align 1 48494173dc2SBen Shi %sub = sub i8 %0, %1 48594173dc2SBen Shi ret i8 %sub 48694173dc2SBen Shi} 487