brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.7 KiB · 533a436 Raw
806 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple aarch64 -verify-machineinstrs | FileCheck %s3 4define i64 @Str64Ldr64(ptr nocapture %P, i64 %v, i64 %n) {5; CHECK-LABEL: Str64Ldr64:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    mov x8, x08; CHECK-NEXT:    mov x0, x19; CHECK-NEXT:    str x1, [x8, #8]10; CHECK-NEXT:    ret11entry:12  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 113  store i64 %v, ptr %arrayidx014  %arrayidx1 = getelementptr inbounds i64, ptr %P, i64 115  %0 = load i64, ptr %arrayidx116  ret i64 %017}18 19define i32 @Str64Ldr32_0(ptr nocapture %P, i64 %v, i64 %n) {20; CHECK-LABEL: Str64Ldr32_0:21; CHECK:       // %bb.0: // %entry22; CHECK-NEXT:    mov x8, x023; CHECK-NEXT:    mov w0, w124; CHECK-NEXT:    str x1, [x8, #8]25; CHECK-NEXT:    ret26entry:27  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 128  store i64 %v, ptr %arrayidx029  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 230  %0 = load i32, ptr %arrayidx131  ret i32 %032}33 34define i32 @Str64Ldr32_1(ptr nocapture %P, i64 %v, i64 %n) {35; CHECK-LABEL: Str64Ldr32_1:36; CHECK:       // %bb.0: // %entry37; CHECK-NEXT:    str x1, [x0, #8]38; CHECK-NEXT:    lsr x0, x1, #3239; CHECK-NEXT:    ret40entry:41  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 142  store i64 %v, ptr %arrayidx043  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 344  %0 = load i32, ptr %arrayidx145  ret i32 %046}47 48define i16 @Str64Ldr16_0(ptr nocapture %P, i64 %v, i64 %n) {49; CHECK-LABEL: Str64Ldr16_0:50; CHECK:       // %bb.0: // %entry51; CHECK-NEXT:    mov x8, x052; CHECK-NEXT:    mov w0, w153; CHECK-NEXT:    str x1, [x8, #8]54; CHECK-NEXT:    ret55entry:56  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 157  store i64 %v, ptr %arrayidx058  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 459  %0 = load i16, ptr %arrayidx160  ret i16 %061}62 63define i16 @Str64Ldr16_1(ptr nocapture %P, i64 %v, i64 %n) {64; CHECK-LABEL: Str64Ldr16_1:65; CHECK:       // %bb.0: // %entry66; CHECK-NEXT:    str x1, [x0, #8]67; CHECK-NEXT:    lsr w0, w1, #1668; CHECK-NEXT:    ret69entry:70  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 171  store i64 %v, ptr %arrayidx072  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 573  %0 = load i16, ptr %arrayidx174  ret i16 %075}76 77define i16 @Str64Ldr16_2(ptr nocapture %P, i64 %v, i64 %n) {78; CHECK-LABEL: Str64Ldr16_2:79; CHECK:       // %bb.0: // %entry80; CHECK-NEXT:    str x1, [x0, #8]81; CHECK-NEXT:    ubfx x0, x1, #32, #1682; CHECK-NEXT:    ret83entry:84  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 185  store i64 %v, ptr %arrayidx086  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 687  %0 = load i16, ptr %arrayidx188  ret i16 %089}90 91define i16 @Str64Ldr16_3(ptr nocapture %P, i64 %v, i64 %n) {92; CHECK-LABEL: Str64Ldr16_3:93; CHECK:       // %bb.0: // %entry94; CHECK-NEXT:    str x1, [x0, #8]95; CHECK-NEXT:    lsr x0, x1, #4896; CHECK-NEXT:    ret97entry:98  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 199  store i64 %v, ptr %arrayidx0100  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 7101  %0 = load i16, ptr %arrayidx1102  ret i16 %0103}104 105define i8 @Str64Ldr8_0(ptr nocapture %P, i64 %v, i64 %n) {106; CHECK-LABEL: Str64Ldr8_0:107; CHECK:       // %bb.0: // %entry108; CHECK-NEXT:    mov x8, x0109; CHECK-NEXT:    mov w0, w1110; CHECK-NEXT:    str x1, [x8, #8]111; CHECK-NEXT:    ret112entry:113  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1114  store i64 %v, ptr %arrayidx0115  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 8116  %0 = load i8, ptr %arrayidx1117  ret i8 %0118}119 120define i8 @Str64Ldr8_1(ptr nocapture %P, i64 %v, i64 %n) {121; CHECK-LABEL: Str64Ldr8_1:122; CHECK:       // %bb.0: // %entry123; CHECK-NEXT:    str x1, [x0, #8]124; CHECK-NEXT:    ubfx x0, x1, #8, #8125; CHECK-NEXT:    ret126entry:127  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1128  store i64 %v, ptr %arrayidx0129  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 9130  %0 = load i8, ptr %arrayidx1131  ret i8 %0132}133 134define i8 @Str64Ldr8_2(ptr nocapture %P, i64 %v, i64 %n) {135; CHECK-LABEL: Str64Ldr8_2:136; CHECK:       // %bb.0: // %entry137; CHECK-NEXT:    str x1, [x0, #8]138; CHECK-NEXT:    ubfx x0, x1, #16, #8139; CHECK-NEXT:    ret140entry:141  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1142  store i64 %v, ptr %arrayidx0143  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 10144  %0 = load i8, ptr %arrayidx1145  ret i8 %0146}147 148define i8 @Str64Ldr8_3(ptr nocapture %P, i64 %v, i64 %n) {149; CHECK-LABEL: Str64Ldr8_3:150; CHECK:       // %bb.0: // %entry151; CHECK-NEXT:    str x1, [x0, #8]152; CHECK-NEXT:    lsr w0, w1, #24153; CHECK-NEXT:    ret154entry:155  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1156  store i64 %v, ptr %arrayidx0157  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 11158  %0 = load i8, ptr %arrayidx1159  ret i8 %0160}161 162define i8 @Str64Ldr8_4(ptr nocapture %P, i64 %v, i64 %n) {163; CHECK-LABEL: Str64Ldr8_4:164; CHECK:       // %bb.0: // %entry165; CHECK-NEXT:    str x1, [x0, #8]166; CHECK-NEXT:    ubfx x0, x1, #32, #8167; CHECK-NEXT:    ret168entry:169  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1170  store i64 %v, ptr %arrayidx0171  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 12172  %0 = load i8, ptr %arrayidx1173  ret i8 %0174}175 176define i8 @Str64Ldr8_5(ptr nocapture %P, i64 %v, i64 %n) {177; CHECK-LABEL: Str64Ldr8_5:178; CHECK:       // %bb.0: // %entry179; CHECK-NEXT:    str x1, [x0, #8]180; CHECK-NEXT:    ubfx x0, x1, #40, #8181; CHECK-NEXT:    ret182entry:183  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1184  store i64 %v, ptr %arrayidx0185  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 13186  %0 = load i8, ptr %arrayidx1187  ret i8 %0188}189 190define i8 @Str64Ldr8_6(ptr nocapture %P, i64 %v, i64 %n) {191; CHECK-LABEL: Str64Ldr8_6:192; CHECK:       // %bb.0: // %entry193; CHECK-NEXT:    str x1, [x0, #8]194; CHECK-NEXT:    ubfx x0, x1, #48, #8195; CHECK-NEXT:    ret196entry:197  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1198  store i64 %v, ptr %arrayidx0199  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 14200  %0 = load i8, ptr %arrayidx1201  ret i8 %0202}203 204define i8 @Str64Ldr8_7(ptr nocapture %P, i64 %v, i64 %n) {205; CHECK-LABEL: Str64Ldr8_7:206; CHECK:       // %bb.0: // %entry207; CHECK-NEXT:    str x1, [x0, #8]208; CHECK-NEXT:    lsr x0, x1, #56209; CHECK-NEXT:    ret210entry:211  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 1212  store i64 %v, ptr %arrayidx0213  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 15214  %0 = load i8, ptr %arrayidx1215  ret i8 %0216}217 218define i32 @Str32Ldr32(ptr nocapture %P, i32 %v, i64 %n) {219; CHECK-LABEL: Str32Ldr32:220; CHECK:       // %bb.0: // %entry221; CHECK-NEXT:    mov x8, x0222; CHECK-NEXT:    mov w0, w1223; CHECK-NEXT:    str w1, [x8, #4]224; CHECK-NEXT:    ret225entry:226  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1227  store i32 %v, ptr %arrayidx0228  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 1229  %0 = load i32, ptr %arrayidx1230  ret i32 %0231}232 233define i16 @Str32Ldr16_0(ptr nocapture %P, i32 %v, i64 %n) {234; CHECK-LABEL: Str32Ldr16_0:235; CHECK:       // %bb.0: // %entry236; CHECK-NEXT:    mov x8, x0237; CHECK-NEXT:    mov w0, w1238; CHECK-NEXT:    str w1, [x8, #4]239; CHECK-NEXT:    ret240entry:241  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1242  store i32 %v, ptr %arrayidx0243  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 2244  %0 = load i16, ptr %arrayidx1245  ret i16 %0246}247 248define i16 @Str32Ldr16_1(ptr nocapture %P, i32 %v, i64 %n) {249; CHECK-LABEL: Str32Ldr16_1:250; CHECK:       // %bb.0: // %entry251; CHECK-NEXT:    str w1, [x0, #4]252; CHECK-NEXT:    lsr w0, w1, #16253; CHECK-NEXT:    ret254entry:255  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1256  store i32 %v, ptr %arrayidx0257  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 3258  %0 = load i16, ptr %arrayidx1259  ret i16 %0260}261 262define i8 @Str32Ldr8_0(ptr nocapture %P, i32 %v, i64 %n) {263; CHECK-LABEL: Str32Ldr8_0:264; CHECK:       // %bb.0: // %entry265; CHECK-NEXT:    mov x8, x0266; CHECK-NEXT:    mov w0, w1267; CHECK-NEXT:    str w1, [x8, #4]268; CHECK-NEXT:    ret269entry:270  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1271  store i32 %v, ptr %arrayidx0272  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 4273  %0 = load i8, ptr %arrayidx1274  ret i8 %0275}276 277define i8 @Str32Ldr8_1(ptr nocapture %P, i32 %v, i64 %n) {278; CHECK-LABEL: Str32Ldr8_1:279; CHECK:       // %bb.0: // %entry280; CHECK-NEXT:    str w1, [x0, #4]281; CHECK-NEXT:    ubfx w0, w1, #8, #8282; CHECK-NEXT:    ret283entry:284  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1285  store i32 %v, ptr %arrayidx0286  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 5287  %0 = load i8, ptr %arrayidx1288  ret i8 %0289}290 291define i8 @Str32Ldr8_2(ptr nocapture %P, i32 %v, i64 %n) {292; CHECK-LABEL: Str32Ldr8_2:293; CHECK:       // %bb.0: // %entry294; CHECK-NEXT:    str w1, [x0, #4]295; CHECK-NEXT:    ubfx w0, w1, #16, #8296; CHECK-NEXT:    ret297entry:298  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1299  store i32 %v, ptr %arrayidx0300  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 6301  %0 = load i8, ptr %arrayidx1302  ret i8 %0303}304 305define i8 @Str32Ldr8_3(ptr nocapture %P, i32 %v, i64 %n) {306; CHECK-LABEL: Str32Ldr8_3:307; CHECK:       // %bb.0: // %entry308; CHECK-NEXT:    str w1, [x0, #4]309; CHECK-NEXT:    lsr w0, w1, #24310; CHECK-NEXT:    ret311entry:312  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1313  store i32 %v, ptr %arrayidx0314  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 7315  %0 = load i8, ptr %arrayidx1316  ret i8 %0317}318 319define i16 @Str16Ldr16(ptr nocapture %P, i16 %v, i64 %n) {320; CHECK-LABEL: Str16Ldr16:321; CHECK:       // %bb.0: // %entry322; CHECK-NEXT:    mov x8, x0323; CHECK-NEXT:    mov w0, w1324; CHECK-NEXT:    strh w1, [x8, #2]325; CHECK-NEXT:    ret326entry:327  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 1328  store i16 %v, ptr %arrayidx0329  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 1330  %0 = load i16, ptr %arrayidx1331  ret i16 %0332}333 334define i8 @Str16Ldr8_0(ptr nocapture %P, i16 %v, i64 %n) {335; CHECK-LABEL: Str16Ldr8_0:336; CHECK:       // %bb.0: // %entry337; CHECK-NEXT:    mov x8, x0338; CHECK-NEXT:    mov w0, w1339; CHECK-NEXT:    strh w1, [x8, #2]340; CHECK-NEXT:    ret341entry:342  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 1343  store i16 %v, ptr %arrayidx0344  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 2345  %0 = load i8, ptr %arrayidx1346  ret i8 %0347}348 349define i8 @Str16Ldr8_1(ptr nocapture %P, i16 %v, i64 %n) {350; CHECK-LABEL: Str16Ldr8_1:351; CHECK:       // %bb.0: // %entry352; CHECK-NEXT:    strh w1, [x0, #2]353; CHECK-NEXT:    ubfx w0, w1, #8, #8354; CHECK-NEXT:    ret355entry:356  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 1357  store i16 %v, ptr %arrayidx0358  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 3359  %0 = load i8, ptr %arrayidx1360  ret i8 %0361}362 363 364define i64 @Unscaled_Str64Ldr64(ptr nocapture %P, i64 %v, i64 %n) {365; CHECK-LABEL: Unscaled_Str64Ldr64:366; CHECK:       // %bb.0: // %entry367; CHECK-NEXT:    mov x8, x0368; CHECK-NEXT:    mov x0, x1369; CHECK-NEXT:    stur x1, [x8, #-8]370; CHECK-NEXT:    ret371entry:372  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1373  store i64 %v, ptr %arrayidx0374  %arrayidx1 = getelementptr inbounds i64, ptr %P, i64 -1375  %0 = load i64, ptr %arrayidx1376  ret i64 %0377}378 379define i32 @Unscaled_Str64Ldr32_0(ptr nocapture %P, i64 %v, i64 %n) {380; CHECK-LABEL: Unscaled_Str64Ldr32_0:381; CHECK:       // %bb.0: // %entry382; CHECK-NEXT:    mov x8, x0383; CHECK-NEXT:    mov w0, w1384; CHECK-NEXT:    stur x1, [x8, #-8]385; CHECK-NEXT:    ret386entry:387  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1388  store i64 %v, ptr %arrayidx0389  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 -2390  %0 = load i32, ptr %arrayidx1391  ret i32 %0392}393 394define i32 @Unscaled_Str64Ldr32_1(ptr nocapture %P, i64 %v, i64 %n) {395; CHECK-LABEL: Unscaled_Str64Ldr32_1:396; CHECK:       // %bb.0: // %entry397; CHECK-NEXT:    stur x1, [x0, #-8]398; CHECK-NEXT:    lsr x0, x1, #32399; CHECK-NEXT:    ret400entry:401  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1402  store i64 %v, ptr %arrayidx0403  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 -1404  %0 = load i32, ptr %arrayidx1405  ret i32 %0406}407 408define i16 @Unscaled_Str64Ldr16_0(ptr nocapture %P, i64 %v, i64 %n) {409; CHECK-LABEL: Unscaled_Str64Ldr16_0:410; CHECK:       // %bb.0: // %entry411; CHECK-NEXT:    mov x8, x0412; CHECK-NEXT:    mov w0, w1413; CHECK-NEXT:    stur x1, [x8, #-8]414; CHECK-NEXT:    ret415entry:416  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1417  store i64 %v, ptr %arrayidx0418  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -4419  %0 = load i16, ptr %arrayidx1420  ret i16 %0421}422 423define i16 @Unscaled_Str64Ldr16_1(ptr nocapture %P, i64 %v, i64 %n) {424; CHECK-LABEL: Unscaled_Str64Ldr16_1:425; CHECK:       // %bb.0: // %entry426; CHECK-NEXT:    stur x1, [x0, #-8]427; CHECK-NEXT:    lsr w0, w1, #16428; CHECK-NEXT:    ret429entry:430  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1431  store i64 %v, ptr %arrayidx0432  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -3433  %0 = load i16, ptr %arrayidx1434  ret i16 %0435}436 437define i16 @Unscaled_Str64Ldr16_2(ptr nocapture %P, i64 %v, i64 %n) {438; CHECK-LABEL: Unscaled_Str64Ldr16_2:439; CHECK:       // %bb.0: // %entry440; CHECK-NEXT:    stur x1, [x0, #-8]441; CHECK-NEXT:    ubfx x0, x1, #32, #16442; CHECK-NEXT:    ret443entry:444  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1445  store i64 %v, ptr %arrayidx0446  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -2447  %0 = load i16, ptr %arrayidx1448  ret i16 %0449}450 451define i16 @Unscaled_Str64Ldr16_3(ptr nocapture %P, i64 %v, i64 %n) {452; CHECK-LABEL: Unscaled_Str64Ldr16_3:453; CHECK:       // %bb.0: // %entry454; CHECK-NEXT:    stur x1, [x0, #-8]455; CHECK-NEXT:    lsr x0, x1, #48456; CHECK-NEXT:    ret457entry:458  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1459  store i64 %v, ptr %arrayidx0460  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -1461  %0 = load i16, ptr %arrayidx1462  ret i16 %0463}464 465define i8 @Unscaled_Str64Ldr8_0(ptr nocapture %P, i64 %v, i64 %n) {466; CHECK-LABEL: Unscaled_Str64Ldr8_0:467; CHECK:       // %bb.0: // %entry468; CHECK-NEXT:    mov x8, x0469; CHECK-NEXT:    mov w0, w1470; CHECK-NEXT:    stur x1, [x8, #-8]471; CHECK-NEXT:    ret472entry:473  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1474  store i64 %v, ptr %arrayidx0475  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -8476  %0 = load i8, ptr %arrayidx1477  ret i8 %0478}479 480define i8 @Unscaled_Str64Ldr8_1(ptr nocapture %P, i64 %v, i64 %n) {481; CHECK-LABEL: Unscaled_Str64Ldr8_1:482; CHECK:       // %bb.0: // %entry483; CHECK-NEXT:    stur x1, [x0, #-8]484; CHECK-NEXT:    ubfx x0, x1, #8, #8485; CHECK-NEXT:    ret486entry:487  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1488  store i64 %v, ptr %arrayidx0489  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -7490  %0 = load i8, ptr %arrayidx1491  ret i8 %0492}493 494define i8 @Unscaled_Str64Ldr8_2(ptr nocapture %P, i64 %v, i64 %n) {495; CHECK-LABEL: Unscaled_Str64Ldr8_2:496; CHECK:       // %bb.0: // %entry497; CHECK-NEXT:    stur x1, [x0, #-8]498; CHECK-NEXT:    ubfx x0, x1, #16, #8499; CHECK-NEXT:    ret500entry:501  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1502  store i64 %v, ptr %arrayidx0503  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -6504  %0 = load i8, ptr %arrayidx1505  ret i8 %0506}507 508define i8 @Unscaled_Str64Ldr8_3(ptr nocapture %P, i64 %v, i64 %n) {509; CHECK-LABEL: Unscaled_Str64Ldr8_3:510; CHECK:       // %bb.0: // %entry511; CHECK-NEXT:    stur x1, [x0, #-8]512; CHECK-NEXT:    lsr w0, w1, #24513; CHECK-NEXT:    ret514entry:515  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1516  store i64 %v, ptr %arrayidx0517  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -5518  %0 = load i8, ptr %arrayidx1519  ret i8 %0520}521 522define i8 @Unscaled_Str64Ldr8_4(ptr nocapture %P, i64 %v, i64 %n) {523; CHECK-LABEL: Unscaled_Str64Ldr8_4:524; CHECK:       // %bb.0: // %entry525; CHECK-NEXT:    stur x1, [x0, #-8]526; CHECK-NEXT:    ubfx x0, x1, #32, #8527; CHECK-NEXT:    ret528entry:529  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1530  store i64 %v, ptr %arrayidx0531  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -4532  %0 = load i8, ptr %arrayidx1533  ret i8 %0534}535 536define i8 @Unscaled_Str64Ldr8_5(ptr nocapture %P, i64 %v, i64 %n) {537; CHECK-LABEL: Unscaled_Str64Ldr8_5:538; CHECK:       // %bb.0: // %entry539; CHECK-NEXT:    stur x1, [x0, #-8]540; CHECK-NEXT:    ubfx x0, x1, #40, #8541; CHECK-NEXT:    ret542entry:543  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1544  store i64 %v, ptr %arrayidx0545  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -3546  %0 = load i8, ptr %arrayidx1547  ret i8 %0548}549 550define i8 @Unscaled_Str64Ldr8_6(ptr nocapture %P, i64 %v, i64 %n) {551; CHECK-LABEL: Unscaled_Str64Ldr8_6:552; CHECK:       // %bb.0: // %entry553; CHECK-NEXT:    stur x1, [x0, #-8]554; CHECK-NEXT:    ubfx x0, x1, #48, #8555; CHECK-NEXT:    ret556entry:557  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1558  store i64 %v, ptr %arrayidx0559  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -2560  %0 = load i8, ptr %arrayidx1561  ret i8 %0562}563 564define i8 @Unscaled_Str64Ldr8_7(ptr nocapture %P, i64 %v, i64 %n) {565; CHECK-LABEL: Unscaled_Str64Ldr8_7:566; CHECK:       // %bb.0: // %entry567; CHECK-NEXT:    stur x1, [x0, #-8]568; CHECK-NEXT:    lsr x0, x1, #56569; CHECK-NEXT:    ret570entry:571  %arrayidx0 = getelementptr inbounds i64, ptr %P, i64 -1572  store i64 %v, ptr %arrayidx0573  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -1574  %0 = load i8, ptr %arrayidx1575  ret i8 %0576}577 578define i32 @Unscaled_Str32Ldr32(ptr nocapture %P, i32 %v, i64 %n) {579; CHECK-LABEL: Unscaled_Str32Ldr32:580; CHECK:       // %bb.0: // %entry581; CHECK-NEXT:    mov x8, x0582; CHECK-NEXT:    mov w0, w1583; CHECK-NEXT:    stur w1, [x8, #-4]584; CHECK-NEXT:    ret585entry:586  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1587  store i32 %v, ptr %arrayidx0588  %arrayidx1 = getelementptr inbounds i32, ptr %P, i64 -1589  %0 = load i32, ptr %arrayidx1590  ret i32 %0591}592 593define i16 @Unscaled_Str32Ldr16_0(ptr nocapture %P, i32 %v, i64 %n) {594; CHECK-LABEL: Unscaled_Str32Ldr16_0:595; CHECK:       // %bb.0: // %entry596; CHECK-NEXT:    mov x8, x0597; CHECK-NEXT:    mov w0, w1598; CHECK-NEXT:    stur w1, [x8, #-4]599; CHECK-NEXT:    ret600entry:601  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1602  store i32 %v, ptr %arrayidx0603  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -2604  %0 = load i16, ptr %arrayidx1605  ret i16 %0606}607 608define i16 @Unscaled_Str32Ldr16_1(ptr nocapture %P, i32 %v, i64 %n) {609; CHECK-LABEL: Unscaled_Str32Ldr16_1:610; CHECK:       // %bb.0: // %entry611; CHECK-NEXT:    stur w1, [x0, #-4]612; CHECK-NEXT:    lsr w0, w1, #16613; CHECK-NEXT:    ret614entry:615  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1616  store i32 %v, ptr %arrayidx0617  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -1618  %0 = load i16, ptr %arrayidx1619  ret i16 %0620}621 622define i8 @Unscaled_Str32Ldr8_0(ptr nocapture %P, i32 %v, i64 %n) {623; CHECK-LABEL: Unscaled_Str32Ldr8_0:624; CHECK:       // %bb.0: // %entry625; CHECK-NEXT:    mov x8, x0626; CHECK-NEXT:    mov w0, w1627; CHECK-NEXT:    stur w1, [x8, #-4]628; CHECK-NEXT:    ret629entry:630  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1631  store i32 %v, ptr %arrayidx0632  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -4633  %0 = load i8, ptr %arrayidx1634  ret i8 %0635}636 637define i8 @Unscaled_Str32Ldr8_1(ptr nocapture %P, i32 %v, i64 %n) {638; CHECK-LABEL: Unscaled_Str32Ldr8_1:639; CHECK:       // %bb.0: // %entry640; CHECK-NEXT:    stur w1, [x0, #-4]641; CHECK-NEXT:    ubfx w0, w1, #8, #8642; CHECK-NEXT:    ret643entry:644  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1645  store i32 %v, ptr %arrayidx0646  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -3647  %0 = load i8, ptr %arrayidx1648  ret i8 %0649}650 651define i8 @Unscaled_Str32Ldr8_2(ptr nocapture %P, i32 %v, i64 %n) {652; CHECK-LABEL: Unscaled_Str32Ldr8_2:653; CHECK:       // %bb.0: // %entry654; CHECK-NEXT:    stur w1, [x0, #-4]655; CHECK-NEXT:    ubfx w0, w1, #16, #8656; CHECK-NEXT:    ret657entry:658  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1659  store i32 %v, ptr %arrayidx0660  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -2661  %0 = load i8, ptr %arrayidx1662  ret i8 %0663}664 665define i8 @Unscaled_Str32Ldr8_3(ptr nocapture %P, i32 %v, i64 %n) {666; CHECK-LABEL: Unscaled_Str32Ldr8_3:667; CHECK:       // %bb.0: // %entry668; CHECK-NEXT:    stur w1, [x0, #-4]669; CHECK-NEXT:    lsr w0, w1, #24670; CHECK-NEXT:    ret671entry:672  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1673  store i32 %v, ptr %arrayidx0674  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -1675  %0 = load i8, ptr %arrayidx1676  ret i8 %0677}678 679define i16 @Unscaled_Str16Ldr16(ptr nocapture %P, i16 %v, i64 %n) {680; CHECK-LABEL: Unscaled_Str16Ldr16:681; CHECK:       // %bb.0: // %entry682; CHECK-NEXT:    mov x8, x0683; CHECK-NEXT:    mov w0, w1684; CHECK-NEXT:    sturh w1, [x8, #-2]685; CHECK-NEXT:    ret686entry:687  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 -1688  store i16 %v, ptr %arrayidx0689  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -1690  %0 = load i16, ptr %arrayidx1691  ret i16 %0692}693 694define i8 @Unscaled_Str16Ldr8_0(ptr nocapture %P, i16 %v, i64 %n) {695; CHECK-LABEL: Unscaled_Str16Ldr8_0:696; CHECK:       // %bb.0: // %entry697; CHECK-NEXT:    mov x8, x0698; CHECK-NEXT:    mov w0, w1699; CHECK-NEXT:    sturh w1, [x8, #-2]700; CHECK-NEXT:    ret701entry:702  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 -1703  store i16 %v, ptr %arrayidx0704  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -2705  %0 = load i8, ptr %arrayidx1706  ret i8 %0707}708 709define i8 @Unscaled_Str16Ldr8_1(ptr nocapture %P, i16 %v, i64 %n) {710; CHECK-LABEL: Unscaled_Str16Ldr8_1:711; CHECK:       // %bb.0: // %entry712; CHECK-NEXT:    sturh w1, [x0, #-2]713; CHECK-NEXT:    ubfx w0, w1, #8, #8714; CHECK-NEXT:    ret715entry:716  %arrayidx0 = getelementptr inbounds i16, ptr %P, i64 -1717  store i16 %v, ptr %arrayidx0718  %arrayidx1 = getelementptr inbounds i8, ptr %P, i64 -1719  %0 = load i8, ptr %arrayidx1720  ret i8 %0721}722 723define i16 @StrVolatileLdr(ptr nocapture %P, i32 %v, i64 %n) {724; CHECK-LABEL: StrVolatileLdr:725; CHECK:       // %bb.0: // %entry726; CHECK-NEXT:    str w1, [x0, #4]727; CHECK-NEXT:    ldrh w0, [x0, #4]728; CHECK-NEXT:    ret729entry:730  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1731  store i32 %v, ptr %arrayidx0732  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 2733  %0 = load volatile i16, ptr %arrayidx1734  ret i16 %0735}736 737define i16 @StrNotInRangeLdr(ptr nocapture %P, i32 %v, i64 %n) {738; CHECK-LABEL: StrNotInRangeLdr:739; CHECK:       // %bb.0: // %entry740; CHECK-NEXT:    mov x8, x0741; CHECK-NEXT:    ldrh w0, [x0, #2]742; CHECK-NEXT:    str w1, [x8, #4]743; CHECK-NEXT:    ret744entry:745  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1746  store i32 %v, ptr %arrayidx0747  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 1748  %0 = load i16, ptr %arrayidx1749  ret i16 %0750}751 752define i16 @Unscaled_StrNotInRangeLdr(ptr nocapture %P, i32 %v, i64 %n) {753; CHECK-LABEL: Unscaled_StrNotInRangeLdr:754; CHECK:       // %bb.0: // %entry755; CHECK-NEXT:    mov x8, x0756; CHECK-NEXT:    ldurh w0, [x0, #-6]757; CHECK-NEXT:    stur w1, [x8, #-4]758; CHECK-NEXT:    ret759entry:760  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 -1761  store i32 %v, ptr %arrayidx0762  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 -3763  %0 = load i16, ptr %arrayidx1764  ret i16 %0765}766 767define i16 @StrCallLdr(ptr nocapture %P, i32 %v, i64 %n) {768; CHECK-LABEL: StrCallLdr:769; CHECK:       // %bb.0: // %entry770; CHECK-NEXT:    stp x30, x19, [sp, #-16]! // 16-byte Folded Spill771; CHECK-NEXT:    .cfi_def_cfa_offset 16772; CHECK-NEXT:    .cfi_offset w19, -8773; CHECK-NEXT:    .cfi_offset w30, -16774; CHECK-NEXT:    mov x19, x0775; CHECK-NEXT:    str w1, [x0, #4]776; CHECK-NEXT:    bl test_dummy777; CHECK-NEXT:    ldrh w0, [x19, #2]778; CHECK-NEXT:    ldp x30, x19, [sp], #16 // 16-byte Folded Reload779; CHECK-NEXT:    ret780entry:781  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1782  store i32 %v, ptr %arrayidx0783  %c = call i1 @test_dummy()784  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 1785  %0 = load i16, ptr %arrayidx1786  ret i16 %0787}788 789declare i1 @test_dummy()790 791define i16 @StrStrLdr(i32 %v, ptr %P, ptr %P2, i32 %n) {792; CHECK-LABEL: StrStrLdr:793; CHECK:       // %bb.0: // %entry794; CHECK-NEXT:    str w0, [x1, #4]795; CHECK-NEXT:    str w3, [x2]796; CHECK-NEXT:    ldrh w0, [x1, #4]797; CHECK-NEXT:    ret798entry:799  %arrayidx0 = getelementptr inbounds i32, ptr %P, i64 1800  store i32 %v, ptr %arrayidx0801  store i32 %n, ptr %P2802  %arrayidx1 = getelementptr inbounds i16, ptr %P, i64 2803  %0 = load i16, ptr %arrayidx1804  ret i16 %0805}806