brintos

brintos / llvm-project-archived public Read only

0
0
Text · 42.9 KiB · 18ba481 Raw
1453 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc --mtriple=loongarch32 --mattr=-32s,+d --relocation-model=static < %s | FileCheck %s --check-prefixes=ALL,LA32RNOPIC3; RUN: llc --mtriple=loongarch32 --mattr=+32s,+d --relocation-model=static < %s | FileCheck %s --check-prefixes=ALL,LA32SNOPIC4; RUN: llc --mtriple=loongarch32 --mattr=-32s,+d --relocation-model=pic < %s | FileCheck %s --check-prefixes=ALL,LA32RPIC5; RUN: llc --mtriple=loongarch32 --mattr=+32s,+d --relocation-model=pic < %s | FileCheck %s --check-prefixes=ALL,LA32SPIC6; RUN: llc --mtriple=loongarch64 --mattr=+d --relocation-model=static < %s | FileCheck %s --check-prefixes=ALL,LA64NOPIC7; RUN: llc --mtriple=loongarch64 --mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefixes=ALL,LA64PIC8 9;; Check load from and store to global variables.10@G = dso_local global i32 zeroinitializer, align 411@arr = dso_local global [10 x i32] zeroinitializer, align 412 13define i32 @load_store_global() nounwind {14; LA32RNOPIC-LABEL: load_store_global:15; LA32RNOPIC:       # %bb.0:16; LA32RNOPIC-NEXT:    pcalau12i $a1, %pc_hi20(G)17; LA32RNOPIC-NEXT:    ld.w $a0, $a1, %pc_lo12(G)18; LA32RNOPIC-NEXT:    addi.w $a0, $a0, 119; LA32RNOPIC-NEXT:    st.w $a0, $a1, %pc_lo12(G)20; LA32RNOPIC-NEXT:    ret21;22; LA32SNOPIC-LABEL: load_store_global:23; LA32SNOPIC:       # %bb.0:24; LA32SNOPIC-NEXT:    pcalau12i $a1, %pc_hi20(G)25; LA32SNOPIC-NEXT:    ld.w $a0, $a1, %pc_lo12(G)26; LA32SNOPIC-NEXT:    addi.w $a0, $a0, 127; LA32SNOPIC-NEXT:    st.w $a0, $a1, %pc_lo12(G)28; LA32SNOPIC-NEXT:    ret29;30; LA32RPIC-LABEL: load_store_global:31; LA32RPIC:       # %bb.0:32; LA32RPIC-NEXT:    pcalau12i $a1, %pc_hi20(.LG$local)33; LA32RPIC-NEXT:    ld.w $a0, $a1, %pc_lo12(.LG$local)34; LA32RPIC-NEXT:    addi.w $a0, $a0, 135; LA32RPIC-NEXT:    st.w $a0, $a1, %pc_lo12(.LG$local)36; LA32RPIC-NEXT:    ret37;38; LA32SPIC-LABEL: load_store_global:39; LA32SPIC:       # %bb.0:40; LA32SPIC-NEXT:    pcalau12i $a1, %pc_hi20(.LG$local)41; LA32SPIC-NEXT:    ld.w $a0, $a1, %pc_lo12(.LG$local)42; LA32SPIC-NEXT:    addi.w $a0, $a0, 143; LA32SPIC-NEXT:    st.w $a0, $a1, %pc_lo12(.LG$local)44; LA32SPIC-NEXT:    ret45;46; LA64NOPIC-LABEL: load_store_global:47; LA64NOPIC:       # %bb.0:48; LA64NOPIC-NEXT:    pcalau12i $a1, %pc_hi20(G)49; LA64NOPIC-NEXT:    ld.w $a0, $a1, %pc_lo12(G)50; LA64NOPIC-NEXT:    addi.w $a0, $a0, 151; LA64NOPIC-NEXT:    st.w $a0, $a1, %pc_lo12(G)52; LA64NOPIC-NEXT:    ret53;54; LA64PIC-LABEL: load_store_global:55; LA64PIC:       # %bb.0:56; LA64PIC-NEXT:    pcalau12i $a1, %pc_hi20(.LG$local)57; LA64PIC-NEXT:    ld.w $a0, $a1, %pc_lo12(.LG$local)58; LA64PIC-NEXT:    addi.w $a0, $a0, 159; LA64PIC-NEXT:    st.w $a0, $a1, %pc_lo12(.LG$local)60; LA64PIC-NEXT:    ret61  %v = load i32, ptr @G62  %sum = add i32 %v, 163  store i32 %sum, ptr @G64  ret i32 %sum65}66 67define i32 @load_store_global_array(i32 %a) nounwind {68; LA32RNOPIC-LABEL: load_store_global_array:69; LA32RNOPIC:       # %bb.0:70; LA32RNOPIC-NEXT:    pcalau12i $a1, %pc_hi20(arr)71; LA32RNOPIC-NEXT:    addi.w $a2, $a1, %pc_lo12(arr)72; LA32RNOPIC-NEXT:    ld.w $a1, $a2, 073; LA32RNOPIC-NEXT:    st.w $a0, $a2, 074; LA32RNOPIC-NEXT:    ld.w $zero, $a2, 3675; LA32RNOPIC-NEXT:    st.w $a0, $a2, 3676; LA32RNOPIC-NEXT:    move $a0, $a177; LA32RNOPIC-NEXT:    ret78;79; LA32SNOPIC-LABEL: load_store_global_array:80; LA32SNOPIC:       # %bb.0:81; LA32SNOPIC-NEXT:    pcalau12i $a1, %pc_hi20(arr)82; LA32SNOPIC-NEXT:    addi.w $a2, $a1, %pc_lo12(arr)83; LA32SNOPIC-NEXT:    ld.w $a1, $a2, 084; LA32SNOPIC-NEXT:    st.w $a0, $a2, 085; LA32SNOPIC-NEXT:    ld.w $zero, $a2, 3686; LA32SNOPIC-NEXT:    st.w $a0, $a2, 3687; LA32SNOPIC-NEXT:    move $a0, $a188; LA32SNOPIC-NEXT:    ret89;90; LA32RPIC-LABEL: load_store_global_array:91; LA32RPIC:       # %bb.0:92; LA32RPIC-NEXT:    pcalau12i $a1, %pc_hi20(.Larr$local)93; LA32RPIC-NEXT:    addi.w $a2, $a1, %pc_lo12(.Larr$local)94; LA32RPIC-NEXT:    ld.w $a1, $a2, 095; LA32RPIC-NEXT:    st.w $a0, $a2, 096; LA32RPIC-NEXT:    ld.w $zero, $a2, 3697; LA32RPIC-NEXT:    st.w $a0, $a2, 3698; LA32RPIC-NEXT:    move $a0, $a199; LA32RPIC-NEXT:    ret100;101; LA32SPIC-LABEL: load_store_global_array:102; LA32SPIC:       # %bb.0:103; LA32SPIC-NEXT:    pcalau12i $a1, %pc_hi20(.Larr$local)104; LA32SPIC-NEXT:    addi.w $a2, $a1, %pc_lo12(.Larr$local)105; LA32SPIC-NEXT:    ld.w $a1, $a2, 0106; LA32SPIC-NEXT:    st.w $a0, $a2, 0107; LA32SPIC-NEXT:    ld.w $zero, $a2, 36108; LA32SPIC-NEXT:    st.w $a0, $a2, 36109; LA32SPIC-NEXT:    move $a0, $a1110; LA32SPIC-NEXT:    ret111;112; LA64NOPIC-LABEL: load_store_global_array:113; LA64NOPIC:       # %bb.0:114; LA64NOPIC-NEXT:    pcalau12i $a1, %pc_hi20(arr)115; LA64NOPIC-NEXT:    addi.d $a2, $a1, %pc_lo12(arr)116; LA64NOPIC-NEXT:    ld.w $a1, $a2, 0117; LA64NOPIC-NEXT:    st.w $a0, $a2, 0118; LA64NOPIC-NEXT:    ld.w $zero, $a2, 36119; LA64NOPIC-NEXT:    st.w $a0, $a2, 36120; LA64NOPIC-NEXT:    move $a0, $a1121; LA64NOPIC-NEXT:    ret122;123; LA64PIC-LABEL: load_store_global_array:124; LA64PIC:       # %bb.0:125; LA64PIC-NEXT:    pcalau12i $a1, %pc_hi20(.Larr$local)126; LA64PIC-NEXT:    addi.d $a2, $a1, %pc_lo12(.Larr$local)127; LA64PIC-NEXT:    ld.w $a1, $a2, 0128; LA64PIC-NEXT:    st.w $a0, $a2, 0129; LA64PIC-NEXT:    ld.w $zero, $a2, 36130; LA64PIC-NEXT:    st.w $a0, $a2, 36131; LA64PIC-NEXT:    move $a0, $a1132; LA64PIC-NEXT:    ret133  %1 = load volatile i32, ptr @arr, align 4134  store i32 %a, ptr @arr, align 4135  %2 = getelementptr [10 x i32], ptr @arr, i32 0, i32 9136  %3 = load volatile i32, ptr %2, align 4137  store i32 %a, ptr %2, align 4138  ret i32 %1139}140 141;; Check indexed and unindexed, sext, zext and anyext loads.142 143define i64 @ld_b(ptr %a) nounwind {144; LA32RNOPIC-LABEL: ld_b:145; LA32RNOPIC:       # %bb.0:146; LA32RNOPIC-NEXT:    ld.b $a2, $a0, 1147; LA32RNOPIC-NEXT:    ld.b $zero, $a0, 0148; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31149; LA32RNOPIC-NEXT:    move $a0, $a2150; LA32RNOPIC-NEXT:    ret151;152; LA32SNOPIC-LABEL: ld_b:153; LA32SNOPIC:       # %bb.0:154; LA32SNOPIC-NEXT:    ld.b $a2, $a0, 1155; LA32SNOPIC-NEXT:    ld.b $zero, $a0, 0156; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31157; LA32SNOPIC-NEXT:    move $a0, $a2158; LA32SNOPIC-NEXT:    ret159;160; LA32RPIC-LABEL: ld_b:161; LA32RPIC:       # %bb.0:162; LA32RPIC-NEXT:    ld.b $a2, $a0, 1163; LA32RPIC-NEXT:    ld.b $zero, $a0, 0164; LA32RPIC-NEXT:    srai.w $a1, $a2, 31165; LA32RPIC-NEXT:    move $a0, $a2166; LA32RPIC-NEXT:    ret167;168; LA32SPIC-LABEL: ld_b:169; LA32SPIC:       # %bb.0:170; LA32SPIC-NEXT:    ld.b $a2, $a0, 1171; LA32SPIC-NEXT:    ld.b $zero, $a0, 0172; LA32SPIC-NEXT:    srai.w $a1, $a2, 31173; LA32SPIC-NEXT:    move $a0, $a2174; LA32SPIC-NEXT:    ret175;176; LA64NOPIC-LABEL: ld_b:177; LA64NOPIC:       # %bb.0:178; LA64NOPIC-NEXT:    ld.b $a1, $a0, 1179; LA64NOPIC-NEXT:    ld.b $zero, $a0, 0180; LA64NOPIC-NEXT:    move $a0, $a1181; LA64NOPIC-NEXT:    ret182;183; LA64PIC-LABEL: ld_b:184; LA64PIC:       # %bb.0:185; LA64PIC-NEXT:    ld.b $a1, $a0, 1186; LA64PIC-NEXT:    ld.b $zero, $a0, 0187; LA64PIC-NEXT:    move $a0, $a1188; LA64PIC-NEXT:    ret189  %1 = getelementptr i8, ptr %a, i64 1190  %2 = load i8, ptr %1191  %3 = sext i8 %2 to i64192  %4 = load volatile i8, ptr %a193  ret i64 %3194}195 196define i64 @ld_h(ptr %a) nounwind {197; LA32RNOPIC-LABEL: ld_h:198; LA32RNOPIC:       # %bb.0:199; LA32RNOPIC-NEXT:    ld.h $a2, $a0, 4200; LA32RNOPIC-NEXT:    ld.h $zero, $a0, 0201; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31202; LA32RNOPIC-NEXT:    move $a0, $a2203; LA32RNOPIC-NEXT:    ret204;205; LA32SNOPIC-LABEL: ld_h:206; LA32SNOPIC:       # %bb.0:207; LA32SNOPIC-NEXT:    ld.h $a2, $a0, 4208; LA32SNOPIC-NEXT:    ld.h $zero, $a0, 0209; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31210; LA32SNOPIC-NEXT:    move $a0, $a2211; LA32SNOPIC-NEXT:    ret212;213; LA32RPIC-LABEL: ld_h:214; LA32RPIC:       # %bb.0:215; LA32RPIC-NEXT:    ld.h $a2, $a0, 4216; LA32RPIC-NEXT:    ld.h $zero, $a0, 0217; LA32RPIC-NEXT:    srai.w $a1, $a2, 31218; LA32RPIC-NEXT:    move $a0, $a2219; LA32RPIC-NEXT:    ret220;221; LA32SPIC-LABEL: ld_h:222; LA32SPIC:       # %bb.0:223; LA32SPIC-NEXT:    ld.h $a2, $a0, 4224; LA32SPIC-NEXT:    ld.h $zero, $a0, 0225; LA32SPIC-NEXT:    srai.w $a1, $a2, 31226; LA32SPIC-NEXT:    move $a0, $a2227; LA32SPIC-NEXT:    ret228;229; LA64NOPIC-LABEL: ld_h:230; LA64NOPIC:       # %bb.0:231; LA64NOPIC-NEXT:    ld.h $a1, $a0, 4232; LA64NOPIC-NEXT:    ld.h $zero, $a0, 0233; LA64NOPIC-NEXT:    move $a0, $a1234; LA64NOPIC-NEXT:    ret235;236; LA64PIC-LABEL: ld_h:237; LA64PIC:       # %bb.0:238; LA64PIC-NEXT:    ld.h $a1, $a0, 4239; LA64PIC-NEXT:    ld.h $zero, $a0, 0240; LA64PIC-NEXT:    move $a0, $a1241; LA64PIC-NEXT:    ret242  %1 = getelementptr i16, ptr %a, i64 2243  %2 = load i16, ptr %1244  %3 = sext i16 %2 to i64245  %4 = load volatile i16, ptr %a246  ret i64 %3247}248 249define i64 @ld_w(ptr %a) nounwind {250; LA32RNOPIC-LABEL: ld_w:251; LA32RNOPIC:       # %bb.0:252; LA32RNOPIC-NEXT:    ld.w $a2, $a0, 12253; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 0254; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31255; LA32RNOPIC-NEXT:    move $a0, $a2256; LA32RNOPIC-NEXT:    ret257;258; LA32SNOPIC-LABEL: ld_w:259; LA32SNOPIC:       # %bb.0:260; LA32SNOPIC-NEXT:    ld.w $a2, $a0, 12261; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 0262; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31263; LA32SNOPIC-NEXT:    move $a0, $a2264; LA32SNOPIC-NEXT:    ret265;266; LA32RPIC-LABEL: ld_w:267; LA32RPIC:       # %bb.0:268; LA32RPIC-NEXT:    ld.w $a2, $a0, 12269; LA32RPIC-NEXT:    ld.w $zero, $a0, 0270; LA32RPIC-NEXT:    srai.w $a1, $a2, 31271; LA32RPIC-NEXT:    move $a0, $a2272; LA32RPIC-NEXT:    ret273;274; LA32SPIC-LABEL: ld_w:275; LA32SPIC:       # %bb.0:276; LA32SPIC-NEXT:    ld.w $a2, $a0, 12277; LA32SPIC-NEXT:    ld.w $zero, $a0, 0278; LA32SPIC-NEXT:    srai.w $a1, $a2, 31279; LA32SPIC-NEXT:    move $a0, $a2280; LA32SPIC-NEXT:    ret281;282; LA64NOPIC-LABEL: ld_w:283; LA64NOPIC:       # %bb.0:284; LA64NOPIC-NEXT:    ld.w $a1, $a0, 12285; LA64NOPIC-NEXT:    ld.w $zero, $a0, 0286; LA64NOPIC-NEXT:    move $a0, $a1287; LA64NOPIC-NEXT:    ret288;289; LA64PIC-LABEL: ld_w:290; LA64PIC:       # %bb.0:291; LA64PIC-NEXT:    ld.w $a1, $a0, 12292; LA64PIC-NEXT:    ld.w $zero, $a0, 0293; LA64PIC-NEXT:    move $a0, $a1294; LA64PIC-NEXT:    ret295  %1 = getelementptr i32, ptr %a, i64 3296  %2 = load i32, ptr %1297  %3 = sext i32 %2 to i64298  %4 = load volatile i32, ptr %a299  ret i64 %3300}301 302define i64 @ld_d(ptr %a) nounwind {303; LA32RNOPIC-LABEL: ld_d:304; LA32RNOPIC:       # %bb.0:305; LA32RNOPIC-NEXT:    ld.w $a1, $a0, 28306; LA32RNOPIC-NEXT:    ld.w $a2, $a0, 24307; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 4308; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 0309; LA32RNOPIC-NEXT:    move $a0, $a2310; LA32RNOPIC-NEXT:    ret311;312; LA32SNOPIC-LABEL: ld_d:313; LA32SNOPIC:       # %bb.0:314; LA32SNOPIC-NEXT:    ld.w $a1, $a0, 28315; LA32SNOPIC-NEXT:    ld.w $a2, $a0, 24316; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 4317; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 0318; LA32SNOPIC-NEXT:    move $a0, $a2319; LA32SNOPIC-NEXT:    ret320;321; LA32RPIC-LABEL: ld_d:322; LA32RPIC:       # %bb.0:323; LA32RPIC-NEXT:    ld.w $a1, $a0, 28324; LA32RPIC-NEXT:    ld.w $a2, $a0, 24325; LA32RPIC-NEXT:    ld.w $zero, $a0, 4326; LA32RPIC-NEXT:    ld.w $zero, $a0, 0327; LA32RPIC-NEXT:    move $a0, $a2328; LA32RPIC-NEXT:    ret329;330; LA32SPIC-LABEL: ld_d:331; LA32SPIC:       # %bb.0:332; LA32SPIC-NEXT:    ld.w $a1, $a0, 28333; LA32SPIC-NEXT:    ld.w $a2, $a0, 24334; LA32SPIC-NEXT:    ld.w $zero, $a0, 4335; LA32SPIC-NEXT:    ld.w $zero, $a0, 0336; LA32SPIC-NEXT:    move $a0, $a2337; LA32SPIC-NEXT:    ret338;339; LA64NOPIC-LABEL: ld_d:340; LA64NOPIC:       # %bb.0:341; LA64NOPIC-NEXT:    ld.d $a1, $a0, 24342; LA64NOPIC-NEXT:    ld.d $zero, $a0, 0343; LA64NOPIC-NEXT:    move $a0, $a1344; LA64NOPIC-NEXT:    ret345;346; LA64PIC-LABEL: ld_d:347; LA64PIC:       # %bb.0:348; LA64PIC-NEXT:    ld.d $a1, $a0, 24349; LA64PIC-NEXT:    ld.d $zero, $a0, 0350; LA64PIC-NEXT:    move $a0, $a1351; LA64PIC-NEXT:    ret352  %1 = getelementptr i64, ptr %a, i64 3353  %2 = load i64, ptr %1354  %3 = load volatile i64, ptr %a355  ret i64 %2356}357 358define i64 @ld_bu(ptr %a) nounwind {359; LA32RNOPIC-LABEL: ld_bu:360; LA32RNOPIC:       # %bb.0:361; LA32RNOPIC-NEXT:    ld.bu $a1, $a0, 4362; LA32RNOPIC-NEXT:    ld.bu $a0, $a0, 0363; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0364; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1365; LA32RNOPIC-NEXT:    ret366;367; LA32SNOPIC-LABEL: ld_bu:368; LA32SNOPIC:       # %bb.0:369; LA32SNOPIC-NEXT:    ld.bu $a1, $a0, 4370; LA32SNOPIC-NEXT:    ld.bu $a0, $a0, 0371; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0372; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1373; LA32SNOPIC-NEXT:    ret374;375; LA32RPIC-LABEL: ld_bu:376; LA32RPIC:       # %bb.0:377; LA32RPIC-NEXT:    ld.bu $a1, $a0, 4378; LA32RPIC-NEXT:    ld.bu $a0, $a0, 0379; LA32RPIC-NEXT:    add.w $a0, $a1, $a0380; LA32RPIC-NEXT:    sltu $a1, $a0, $a1381; LA32RPIC-NEXT:    ret382;383; LA32SPIC-LABEL: ld_bu:384; LA32SPIC:       # %bb.0:385; LA32SPIC-NEXT:    ld.bu $a1, $a0, 4386; LA32SPIC-NEXT:    ld.bu $a0, $a0, 0387; LA32SPIC-NEXT:    add.w $a0, $a1, $a0388; LA32SPIC-NEXT:    sltu $a1, $a0, $a1389; LA32SPIC-NEXT:    ret390;391; LA64NOPIC-LABEL: ld_bu:392; LA64NOPIC:       # %bb.0:393; LA64NOPIC-NEXT:    ld.bu $a1, $a0, 4394; LA64NOPIC-NEXT:    ld.bu $a0, $a0, 0395; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0396; LA64NOPIC-NEXT:    ret397;398; LA64PIC-LABEL: ld_bu:399; LA64PIC:       # %bb.0:400; LA64PIC-NEXT:    ld.bu $a1, $a0, 4401; LA64PIC-NEXT:    ld.bu $a0, $a0, 0402; LA64PIC-NEXT:    add.d $a0, $a1, $a0403; LA64PIC-NEXT:    ret404  %1 = getelementptr i8, ptr %a, i64 4405  %2 = load i8, ptr %1406  %3 = zext i8 %2 to i64407  %4 = load volatile i8, ptr %a408  %5 = zext i8 %4 to i64409  %6 = add i64 %3, %5410  ret i64 %6411}412 413define i64 @ld_hu(ptr %a) nounwind {414; LA32RNOPIC-LABEL: ld_hu:415; LA32RNOPIC:       # %bb.0:416; LA32RNOPIC-NEXT:    ld.hu $a1, $a0, 10417; LA32RNOPIC-NEXT:    ld.hu $a0, $a0, 0418; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0419; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1420; LA32RNOPIC-NEXT:    ret421;422; LA32SNOPIC-LABEL: ld_hu:423; LA32SNOPIC:       # %bb.0:424; LA32SNOPIC-NEXT:    ld.hu $a1, $a0, 10425; LA32SNOPIC-NEXT:    ld.hu $a0, $a0, 0426; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0427; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1428; LA32SNOPIC-NEXT:    ret429;430; LA32RPIC-LABEL: ld_hu:431; LA32RPIC:       # %bb.0:432; LA32RPIC-NEXT:    ld.hu $a1, $a0, 10433; LA32RPIC-NEXT:    ld.hu $a0, $a0, 0434; LA32RPIC-NEXT:    add.w $a0, $a1, $a0435; LA32RPIC-NEXT:    sltu $a1, $a0, $a1436; LA32RPIC-NEXT:    ret437;438; LA32SPIC-LABEL: ld_hu:439; LA32SPIC:       # %bb.0:440; LA32SPIC-NEXT:    ld.hu $a1, $a0, 10441; LA32SPIC-NEXT:    ld.hu $a0, $a0, 0442; LA32SPIC-NEXT:    add.w $a0, $a1, $a0443; LA32SPIC-NEXT:    sltu $a1, $a0, $a1444; LA32SPIC-NEXT:    ret445;446; LA64NOPIC-LABEL: ld_hu:447; LA64NOPIC:       # %bb.0:448; LA64NOPIC-NEXT:    ld.hu $a1, $a0, 10449; LA64NOPIC-NEXT:    ld.hu $a0, $a0, 0450; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0451; LA64NOPIC-NEXT:    ret452;453; LA64PIC-LABEL: ld_hu:454; LA64PIC:       # %bb.0:455; LA64PIC-NEXT:    ld.hu $a1, $a0, 10456; LA64PIC-NEXT:    ld.hu $a0, $a0, 0457; LA64PIC-NEXT:    add.d $a0, $a1, $a0458; LA64PIC-NEXT:    ret459  %1 = getelementptr i16, ptr %a, i64 5460  %2 = load i16, ptr %1461  %3 = zext i16 %2 to i64462  %4 = load volatile i16, ptr %a463  %5 = zext i16 %4 to i64464  %6 = add i64 %3, %5465  ret i64 %6466}467 468define i64 @ld_wu(ptr %a) nounwind {469; LA32RNOPIC-LABEL: ld_wu:470; LA32RNOPIC:       # %bb.0:471; LA32RNOPIC-NEXT:    ld.w $a1, $a0, 20472; LA32RNOPIC-NEXT:    ld.w $a0, $a0, 0473; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0474; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1475; LA32RNOPIC-NEXT:    ret476;477; LA32SNOPIC-LABEL: ld_wu:478; LA32SNOPIC:       # %bb.0:479; LA32SNOPIC-NEXT:    ld.w $a1, $a0, 20480; LA32SNOPIC-NEXT:    ld.w $a0, $a0, 0481; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0482; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1483; LA32SNOPIC-NEXT:    ret484;485; LA32RPIC-LABEL: ld_wu:486; LA32RPIC:       # %bb.0:487; LA32RPIC-NEXT:    ld.w $a1, $a0, 20488; LA32RPIC-NEXT:    ld.w $a0, $a0, 0489; LA32RPIC-NEXT:    add.w $a0, $a1, $a0490; LA32RPIC-NEXT:    sltu $a1, $a0, $a1491; LA32RPIC-NEXT:    ret492;493; LA32SPIC-LABEL: ld_wu:494; LA32SPIC:       # %bb.0:495; LA32SPIC-NEXT:    ld.w $a1, $a0, 20496; LA32SPIC-NEXT:    ld.w $a0, $a0, 0497; LA32SPIC-NEXT:    add.w $a0, $a1, $a0498; LA32SPIC-NEXT:    sltu $a1, $a0, $a1499; LA32SPIC-NEXT:    ret500;501; LA64NOPIC-LABEL: ld_wu:502; LA64NOPIC:       # %bb.0:503; LA64NOPIC-NEXT:    ld.wu $a1, $a0, 20504; LA64NOPIC-NEXT:    ld.wu $a0, $a0, 0505; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0506; LA64NOPIC-NEXT:    ret507;508; LA64PIC-LABEL: ld_wu:509; LA64PIC:       # %bb.0:510; LA64PIC-NEXT:    ld.wu $a1, $a0, 20511; LA64PIC-NEXT:    ld.wu $a0, $a0, 0512; LA64PIC-NEXT:    add.d $a0, $a1, $a0513; LA64PIC-NEXT:    ret514  %1 = getelementptr i32, ptr %a, i64 5515  %2 = load i32, ptr %1516  %3 = zext i32 %2 to i64517  %4 = load volatile i32, ptr %a518  %5 = zext i32 %4 to i64519  %6 = add i64 %3, %5520  ret i64 %6521}522 523define i64 @ldx_b(ptr %a, i64 %idx) nounwind {524; LA32RNOPIC-LABEL: ldx_b:525; LA32RNOPIC:       # %bb.0:526; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1527; LA32RNOPIC-NEXT:    ld.b $a2, $a1, 0528; LA32RNOPIC-NEXT:    ld.b $zero, $a0, 0529; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31530; LA32RNOPIC-NEXT:    move $a0, $a2531; LA32RNOPIC-NEXT:    ret532;533; LA32SNOPIC-LABEL: ldx_b:534; LA32SNOPIC:       # %bb.0:535; LA32SNOPIC-NEXT:    add.w $a1, $a0, $a1536; LA32SNOPIC-NEXT:    ld.b $a2, $a1, 0537; LA32SNOPIC-NEXT:    ld.b $zero, $a0, 0538; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31539; LA32SNOPIC-NEXT:    move $a0, $a2540; LA32SNOPIC-NEXT:    ret541;542; LA32RPIC-LABEL: ldx_b:543; LA32RPIC:       # %bb.0:544; LA32RPIC-NEXT:    add.w $a1, $a0, $a1545; LA32RPIC-NEXT:    ld.b $a2, $a1, 0546; LA32RPIC-NEXT:    ld.b $zero, $a0, 0547; LA32RPIC-NEXT:    srai.w $a1, $a2, 31548; LA32RPIC-NEXT:    move $a0, $a2549; LA32RPIC-NEXT:    ret550;551; LA32SPIC-LABEL: ldx_b:552; LA32SPIC:       # %bb.0:553; LA32SPIC-NEXT:    add.w $a1, $a0, $a1554; LA32SPIC-NEXT:    ld.b $a2, $a1, 0555; LA32SPIC-NEXT:    ld.b $zero, $a0, 0556; LA32SPIC-NEXT:    srai.w $a1, $a2, 31557; LA32SPIC-NEXT:    move $a0, $a2558; LA32SPIC-NEXT:    ret559;560; LA64NOPIC-LABEL: ldx_b:561; LA64NOPIC:       # %bb.0:562; LA64NOPIC-NEXT:    ldx.b $a1, $a0, $a1563; LA64NOPIC-NEXT:    ld.b $zero, $a0, 0564; LA64NOPIC-NEXT:    move $a0, $a1565; LA64NOPIC-NEXT:    ret566;567; LA64PIC-LABEL: ldx_b:568; LA64PIC:       # %bb.0:569; LA64PIC-NEXT:    ldx.b $a1, $a0, $a1570; LA64PIC-NEXT:    ld.b $zero, $a0, 0571; LA64PIC-NEXT:    move $a0, $a1572; LA64PIC-NEXT:    ret573  %1 = getelementptr i8, ptr %a, i64 %idx574  %2 = load i8, ptr %1575  %3 = sext i8 %2 to i64576  %4 = load volatile i8, ptr %a577  ret i64 %3578}579 580define i64 @ldx_h(ptr %a, i64 %idx) nounwind {581; LA32RNOPIC-LABEL: ldx_h:582; LA32RNOPIC:       # %bb.0:583; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 1584; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1585; LA32RNOPIC-NEXT:    ld.h $a2, $a1, 0586; LA32RNOPIC-NEXT:    ld.h $zero, $a0, 0587; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31588; LA32RNOPIC-NEXT:    move $a0, $a2589; LA32RNOPIC-NEXT:    ret590;591; LA32SNOPIC-LABEL: ldx_h:592; LA32SNOPIC:       # %bb.0:593; LA32SNOPIC-NEXT:    alsl.w $a1, $a1, $a0, 1594; LA32SNOPIC-NEXT:    ld.h $a2, $a1, 0595; LA32SNOPIC-NEXT:    ld.h $zero, $a0, 0596; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31597; LA32SNOPIC-NEXT:    move $a0, $a2598; LA32SNOPIC-NEXT:    ret599;600; LA32RPIC-LABEL: ldx_h:601; LA32RPIC:       # %bb.0:602; LA32RPIC-NEXT:    slli.w $a1, $a1, 1603; LA32RPIC-NEXT:    add.w $a1, $a0, $a1604; LA32RPIC-NEXT:    ld.h $a2, $a1, 0605; LA32RPIC-NEXT:    ld.h $zero, $a0, 0606; LA32RPIC-NEXT:    srai.w $a1, $a2, 31607; LA32RPIC-NEXT:    move $a0, $a2608; LA32RPIC-NEXT:    ret609;610; LA32SPIC-LABEL: ldx_h:611; LA32SPIC:       # %bb.0:612; LA32SPIC-NEXT:    alsl.w $a1, $a1, $a0, 1613; LA32SPIC-NEXT:    ld.h $a2, $a1, 0614; LA32SPIC-NEXT:    ld.h $zero, $a0, 0615; LA32SPIC-NEXT:    srai.w $a1, $a2, 31616; LA32SPIC-NEXT:    move $a0, $a2617; LA32SPIC-NEXT:    ret618;619; LA64NOPIC-LABEL: ldx_h:620; LA64NOPIC:       # %bb.0:621; LA64NOPIC-NEXT:    slli.d $a1, $a1, 1622; LA64NOPIC-NEXT:    ldx.h $a1, $a0, $a1623; LA64NOPIC-NEXT:    ld.h $zero, $a0, 0624; LA64NOPIC-NEXT:    move $a0, $a1625; LA64NOPIC-NEXT:    ret626;627; LA64PIC-LABEL: ldx_h:628; LA64PIC:       # %bb.0:629; LA64PIC-NEXT:    slli.d $a1, $a1, 1630; LA64PIC-NEXT:    ldx.h $a1, $a0, $a1631; LA64PIC-NEXT:    ld.h $zero, $a0, 0632; LA64PIC-NEXT:    move $a0, $a1633; LA64PIC-NEXT:    ret634  %1 = getelementptr i16, ptr %a, i64 %idx635  %2 = load i16, ptr %1636  %3 = sext i16 %2 to i64637  %4 = load volatile i16, ptr %a638  ret i64 %3639}640 641define i64 @ldx_w(ptr %a, i64 %idx) nounwind {642; LA32RNOPIC-LABEL: ldx_w:643; LA32RNOPIC:       # %bb.0:644; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 2645; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1646; LA32RNOPIC-NEXT:    ld.w $a2, $a1, 0647; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 0648; LA32RNOPIC-NEXT:    srai.w $a1, $a2, 31649; LA32RNOPIC-NEXT:    move $a0, $a2650; LA32RNOPIC-NEXT:    ret651;652; LA32SNOPIC-LABEL: ldx_w:653; LA32SNOPIC:       # %bb.0:654; LA32SNOPIC-NEXT:    alsl.w $a1, $a1, $a0, 2655; LA32SNOPIC-NEXT:    ld.w $a2, $a1, 0656; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 0657; LA32SNOPIC-NEXT:    srai.w $a1, $a2, 31658; LA32SNOPIC-NEXT:    move $a0, $a2659; LA32SNOPIC-NEXT:    ret660;661; LA32RPIC-LABEL: ldx_w:662; LA32RPIC:       # %bb.0:663; LA32RPIC-NEXT:    slli.w $a1, $a1, 2664; LA32RPIC-NEXT:    add.w $a1, $a0, $a1665; LA32RPIC-NEXT:    ld.w $a2, $a1, 0666; LA32RPIC-NEXT:    ld.w $zero, $a0, 0667; LA32RPIC-NEXT:    srai.w $a1, $a2, 31668; LA32RPIC-NEXT:    move $a0, $a2669; LA32RPIC-NEXT:    ret670;671; LA32SPIC-LABEL: ldx_w:672; LA32SPIC:       # %bb.0:673; LA32SPIC-NEXT:    alsl.w $a1, $a1, $a0, 2674; LA32SPIC-NEXT:    ld.w $a2, $a1, 0675; LA32SPIC-NEXT:    ld.w $zero, $a0, 0676; LA32SPIC-NEXT:    srai.w $a1, $a2, 31677; LA32SPIC-NEXT:    move $a0, $a2678; LA32SPIC-NEXT:    ret679;680; LA64NOPIC-LABEL: ldx_w:681; LA64NOPIC:       # %bb.0:682; LA64NOPIC-NEXT:    slli.d $a1, $a1, 2683; LA64NOPIC-NEXT:    ldx.w $a1, $a0, $a1684; LA64NOPIC-NEXT:    ld.w $zero, $a0, 0685; LA64NOPIC-NEXT:    move $a0, $a1686; LA64NOPIC-NEXT:    ret687;688; LA64PIC-LABEL: ldx_w:689; LA64PIC:       # %bb.0:690; LA64PIC-NEXT:    slli.d $a1, $a1, 2691; LA64PIC-NEXT:    ldx.w $a1, $a0, $a1692; LA64PIC-NEXT:    ld.w $zero, $a0, 0693; LA64PIC-NEXT:    move $a0, $a1694; LA64PIC-NEXT:    ret695  %1 = getelementptr i32, ptr %a, i64 %idx696  %2 = load i32, ptr %1697  %3 = sext i32 %2 to i64698  %4 = load volatile i32, ptr %a699  ret i64 %3700}701 702define i64 @ldx_d(ptr %a, i64 %idx) nounwind {703; LA32RNOPIC-LABEL: ldx_d:704; LA32RNOPIC:       # %bb.0:705; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 3706; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1707; LA32RNOPIC-NEXT:    ld.w $a2, $a1, 0708; LA32RNOPIC-NEXT:    ld.w $a1, $a1, 4709; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 0710; LA32RNOPIC-NEXT:    ld.w $zero, $a0, 4711; LA32RNOPIC-NEXT:    move $a0, $a2712; LA32RNOPIC-NEXT:    ret713;714; LA32SNOPIC-LABEL: ldx_d:715; LA32SNOPIC:       # %bb.0:716; LA32SNOPIC-NEXT:    alsl.w $a1, $a1, $a0, 3717; LA32SNOPIC-NEXT:    ld.w $a2, $a1, 0718; LA32SNOPIC-NEXT:    ld.w $a1, $a1, 4719; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 0720; LA32SNOPIC-NEXT:    ld.w $zero, $a0, 4721; LA32SNOPIC-NEXT:    move $a0, $a2722; LA32SNOPIC-NEXT:    ret723;724; LA32RPIC-LABEL: ldx_d:725; LA32RPIC:       # %bb.0:726; LA32RPIC-NEXT:    slli.w $a1, $a1, 3727; LA32RPIC-NEXT:    add.w $a1, $a0, $a1728; LA32RPIC-NEXT:    ld.w $a2, $a1, 0729; LA32RPIC-NEXT:    ld.w $a1, $a1, 4730; LA32RPIC-NEXT:    ld.w $zero, $a0, 0731; LA32RPIC-NEXT:    ld.w $zero, $a0, 4732; LA32RPIC-NEXT:    move $a0, $a2733; LA32RPIC-NEXT:    ret734;735; LA32SPIC-LABEL: ldx_d:736; LA32SPIC:       # %bb.0:737; LA32SPIC-NEXT:    alsl.w $a1, $a1, $a0, 3738; LA32SPIC-NEXT:    ld.w $a2, $a1, 0739; LA32SPIC-NEXT:    ld.w $a1, $a1, 4740; LA32SPIC-NEXT:    ld.w $zero, $a0, 0741; LA32SPIC-NEXT:    ld.w $zero, $a0, 4742; LA32SPIC-NEXT:    move $a0, $a2743; LA32SPIC-NEXT:    ret744;745; LA64NOPIC-LABEL: ldx_d:746; LA64NOPIC:       # %bb.0:747; LA64NOPIC-NEXT:    slli.d $a1, $a1, 3748; LA64NOPIC-NEXT:    ldx.d $a1, $a0, $a1749; LA64NOPIC-NEXT:    ld.d $zero, $a0, 0750; LA64NOPIC-NEXT:    move $a0, $a1751; LA64NOPIC-NEXT:    ret752;753; LA64PIC-LABEL: ldx_d:754; LA64PIC:       # %bb.0:755; LA64PIC-NEXT:    slli.d $a1, $a1, 3756; LA64PIC-NEXT:    ldx.d $a1, $a0, $a1757; LA64PIC-NEXT:    ld.d $zero, $a0, 0758; LA64PIC-NEXT:    move $a0, $a1759; LA64PIC-NEXT:    ret760  %1 = getelementptr i64, ptr %a, i64 %idx761  %2 = load i64, ptr %1762  %3 = load volatile i64, ptr %a763  ret i64 %2764}765 766define i64 @ldx_bu(ptr %a, i64 %idx) nounwind {767; LA32RNOPIC-LABEL: ldx_bu:768; LA32RNOPIC:       # %bb.0:769; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1770; LA32RNOPIC-NEXT:    ld.bu $a1, $a1, 0771; LA32RNOPIC-NEXT:    ld.bu $a0, $a0, 0772; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0773; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1774; LA32RNOPIC-NEXT:    ret775;776; LA32SNOPIC-LABEL: ldx_bu:777; LA32SNOPIC:       # %bb.0:778; LA32SNOPIC-NEXT:    add.w $a1, $a0, $a1779; LA32SNOPIC-NEXT:    ld.bu $a1, $a1, 0780; LA32SNOPIC-NEXT:    ld.bu $a0, $a0, 0781; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0782; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1783; LA32SNOPIC-NEXT:    ret784;785; LA32RPIC-LABEL: ldx_bu:786; LA32RPIC:       # %bb.0:787; LA32RPIC-NEXT:    add.w $a1, $a0, $a1788; LA32RPIC-NEXT:    ld.bu $a1, $a1, 0789; LA32RPIC-NEXT:    ld.bu $a0, $a0, 0790; LA32RPIC-NEXT:    add.w $a0, $a1, $a0791; LA32RPIC-NEXT:    sltu $a1, $a0, $a1792; LA32RPIC-NEXT:    ret793;794; LA32SPIC-LABEL: ldx_bu:795; LA32SPIC:       # %bb.0:796; LA32SPIC-NEXT:    add.w $a1, $a0, $a1797; LA32SPIC-NEXT:    ld.bu $a1, $a1, 0798; LA32SPIC-NEXT:    ld.bu $a0, $a0, 0799; LA32SPIC-NEXT:    add.w $a0, $a1, $a0800; LA32SPIC-NEXT:    sltu $a1, $a0, $a1801; LA32SPIC-NEXT:    ret802;803; LA64NOPIC-LABEL: ldx_bu:804; LA64NOPIC:       # %bb.0:805; LA64NOPIC-NEXT:    ldx.bu $a1, $a0, $a1806; LA64NOPIC-NEXT:    ld.bu $a0, $a0, 0807; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0808; LA64NOPIC-NEXT:    ret809;810; LA64PIC-LABEL: ldx_bu:811; LA64PIC:       # %bb.0:812; LA64PIC-NEXT:    ldx.bu $a1, $a0, $a1813; LA64PIC-NEXT:    ld.bu $a0, $a0, 0814; LA64PIC-NEXT:    add.d $a0, $a1, $a0815; LA64PIC-NEXT:    ret816  %1 = getelementptr i8, ptr %a, i64 %idx817  %2 = load i8, ptr %1818  %3 = zext i8 %2 to i64819  %4 = load volatile i8, ptr %a820  %5 = zext i8 %4 to i64821  %6 = add i64 %3, %5822  ret i64 %6823}824 825define i64 @ldx_hu(ptr %a, i64 %idx) nounwind {826; LA32RNOPIC-LABEL: ldx_hu:827; LA32RNOPIC:       # %bb.0:828; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 1829; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1830; LA32RNOPIC-NEXT:    ld.hu $a1, $a1, 0831; LA32RNOPIC-NEXT:    ld.hu $a0, $a0, 0832; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0833; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1834; LA32RNOPIC-NEXT:    ret835;836; LA32SNOPIC-LABEL: ldx_hu:837; LA32SNOPIC:       # %bb.0:838; LA32SNOPIC-NEXT:    alsl.w $a1, $a1, $a0, 1839; LA32SNOPIC-NEXT:    ld.hu $a1, $a1, 0840; LA32SNOPIC-NEXT:    ld.hu $a0, $a0, 0841; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0842; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1843; LA32SNOPIC-NEXT:    ret844;845; LA32RPIC-LABEL: ldx_hu:846; LA32RPIC:       # %bb.0:847; LA32RPIC-NEXT:    slli.w $a1, $a1, 1848; LA32RPIC-NEXT:    add.w $a1, $a0, $a1849; LA32RPIC-NEXT:    ld.hu $a1, $a1, 0850; LA32RPIC-NEXT:    ld.hu $a0, $a0, 0851; LA32RPIC-NEXT:    add.w $a0, $a1, $a0852; LA32RPIC-NEXT:    sltu $a1, $a0, $a1853; LA32RPIC-NEXT:    ret854;855; LA32SPIC-LABEL: ldx_hu:856; LA32SPIC:       # %bb.0:857; LA32SPIC-NEXT:    alsl.w $a1, $a1, $a0, 1858; LA32SPIC-NEXT:    ld.hu $a1, $a1, 0859; LA32SPIC-NEXT:    ld.hu $a0, $a0, 0860; LA32SPIC-NEXT:    add.w $a0, $a1, $a0861; LA32SPIC-NEXT:    sltu $a1, $a0, $a1862; LA32SPIC-NEXT:    ret863;864; LA64NOPIC-LABEL: ldx_hu:865; LA64NOPIC:       # %bb.0:866; LA64NOPIC-NEXT:    slli.d $a1, $a1, 1867; LA64NOPIC-NEXT:    ldx.hu $a1, $a0, $a1868; LA64NOPIC-NEXT:    ld.hu $a0, $a0, 0869; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0870; LA64NOPIC-NEXT:    ret871;872; LA64PIC-LABEL: ldx_hu:873; LA64PIC:       # %bb.0:874; LA64PIC-NEXT:    slli.d $a1, $a1, 1875; LA64PIC-NEXT:    ldx.hu $a1, $a0, $a1876; LA64PIC-NEXT:    ld.hu $a0, $a0, 0877; LA64PIC-NEXT:    add.d $a0, $a1, $a0878; LA64PIC-NEXT:    ret879  %1 = getelementptr i16, ptr %a, i64 %idx880  %2 = load i16, ptr %1881  %3 = zext i16 %2 to i64882  %4 = load volatile i16, ptr %a883  %5 = zext i16 %4 to i64884  %6 = add i64 %3, %5885  ret i64 %6886}887 888define i64 @ldx_wu(ptr %a, i64 %idx) nounwind {889; LA32RNOPIC-LABEL: ldx_wu:890; LA32RNOPIC:       # %bb.0:891; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 2892; LA32RNOPIC-NEXT:    add.w $a1, $a0, $a1893; LA32RNOPIC-NEXT:    ld.w $a1, $a1, 0894; LA32RNOPIC-NEXT:    ld.w $a0, $a0, 0895; LA32RNOPIC-NEXT:    add.w $a0, $a1, $a0896; LA32RNOPIC-NEXT:    sltu $a1, $a0, $a1897; LA32RNOPIC-NEXT:    ret898;899; LA32SNOPIC-LABEL: ldx_wu:900; LA32SNOPIC:       # %bb.0:901; LA32SNOPIC-NEXT:    alsl.w $a1, $a1, $a0, 2902; LA32SNOPIC-NEXT:    ld.w $a1, $a1, 0903; LA32SNOPIC-NEXT:    ld.w $a0, $a0, 0904; LA32SNOPIC-NEXT:    add.w $a0, $a1, $a0905; LA32SNOPIC-NEXT:    sltu $a1, $a0, $a1906; LA32SNOPIC-NEXT:    ret907;908; LA32RPIC-LABEL: ldx_wu:909; LA32RPIC:       # %bb.0:910; LA32RPIC-NEXT:    slli.w $a1, $a1, 2911; LA32RPIC-NEXT:    add.w $a1, $a0, $a1912; LA32RPIC-NEXT:    ld.w $a1, $a1, 0913; LA32RPIC-NEXT:    ld.w $a0, $a0, 0914; LA32RPIC-NEXT:    add.w $a0, $a1, $a0915; LA32RPIC-NEXT:    sltu $a1, $a0, $a1916; LA32RPIC-NEXT:    ret917;918; LA32SPIC-LABEL: ldx_wu:919; LA32SPIC:       # %bb.0:920; LA32SPIC-NEXT:    alsl.w $a1, $a1, $a0, 2921; LA32SPIC-NEXT:    ld.w $a1, $a1, 0922; LA32SPIC-NEXT:    ld.w $a0, $a0, 0923; LA32SPIC-NEXT:    add.w $a0, $a1, $a0924; LA32SPIC-NEXT:    sltu $a1, $a0, $a1925; LA32SPIC-NEXT:    ret926;927; LA64NOPIC-LABEL: ldx_wu:928; LA64NOPIC:       # %bb.0:929; LA64NOPIC-NEXT:    slli.d $a1, $a1, 2930; LA64NOPIC-NEXT:    ldx.wu $a1, $a0, $a1931; LA64NOPIC-NEXT:    ld.wu $a0, $a0, 0932; LA64NOPIC-NEXT:    add.d $a0, $a1, $a0933; LA64NOPIC-NEXT:    ret934;935; LA64PIC-LABEL: ldx_wu:936; LA64PIC:       # %bb.0:937; LA64PIC-NEXT:    slli.d $a1, $a1, 2938; LA64PIC-NEXT:    ldx.wu $a1, $a0, $a1939; LA64PIC-NEXT:    ld.wu $a0, $a0, 0940; LA64PIC-NEXT:    add.d $a0, $a1, $a0941; LA64PIC-NEXT:    ret942  %1 = getelementptr i32, ptr %a, i64 %idx943  %2 = load i32, ptr %1944  %3 = zext i32 %2 to i64945  %4 = load volatile i32, ptr %a946  %5 = zext i32 %4 to i64947  %6 = add i64 %3, %5948  ret i64 %6949}950 951;; Check indexed and unindexed stores.952 953define void @st_b(ptr %a, i8 %b) nounwind {954; ALL-LABEL: st_b:955; ALL:       # %bb.0:956; ALL-NEXT:    st.b $a1, $a0, 0957; ALL-NEXT:    st.b $a1, $a0, 6958; ALL-NEXT:    ret959  store i8 %b, ptr %a960  %1 = getelementptr i8, ptr %a, i64 6961  store i8 %b, ptr %1962  ret void963}964 965define void @st_h(ptr %a, i16 %b) nounwind {966; ALL-LABEL: st_h:967; ALL:       # %bb.0:968; ALL-NEXT:    st.h $a1, $a0, 0969; ALL-NEXT:    st.h $a1, $a0, 14970; ALL-NEXT:    ret971  store i16 %b, ptr %a972  %1 = getelementptr i16, ptr %a, i64 7973  store i16 %b, ptr %1974  ret void975}976 977define void @st_w(ptr %a, i32 %b) nounwind {978; ALL-LABEL: st_w:979; ALL:       # %bb.0:980; ALL-NEXT:    st.w $a1, $a0, 0981; ALL-NEXT:    st.w $a1, $a0, 28982; ALL-NEXT:    ret983  store i32 %b, ptr %a984  %1 = getelementptr i32, ptr %a, i64 7985  store i32 %b, ptr %1986  ret void987}988 989define void @st_d(ptr %a, i64 %b) nounwind {990; LA32RNOPIC-LABEL: st_d:991; LA32RNOPIC:       # %bb.0:992; LA32RNOPIC-NEXT:    st.w $a2, $a0, 4993; LA32RNOPIC-NEXT:    st.w $a1, $a0, 0994; LA32RNOPIC-NEXT:    st.w $a2, $a0, 68995; LA32RNOPIC-NEXT:    st.w $a1, $a0, 64996; LA32RNOPIC-NEXT:    ret997;998; LA32SNOPIC-LABEL: st_d:999; LA32SNOPIC:       # %bb.0:1000; LA32SNOPIC-NEXT:    st.w $a2, $a0, 41001; LA32SNOPIC-NEXT:    st.w $a1, $a0, 01002; LA32SNOPIC-NEXT:    st.w $a2, $a0, 681003; LA32SNOPIC-NEXT:    st.w $a1, $a0, 641004; LA32SNOPIC-NEXT:    ret1005;1006; LA32RPIC-LABEL: st_d:1007; LA32RPIC:       # %bb.0:1008; LA32RPIC-NEXT:    st.w $a2, $a0, 41009; LA32RPIC-NEXT:    st.w $a1, $a0, 01010; LA32RPIC-NEXT:    st.w $a2, $a0, 681011; LA32RPIC-NEXT:    st.w $a1, $a0, 641012; LA32RPIC-NEXT:    ret1013;1014; LA32SPIC-LABEL: st_d:1015; LA32SPIC:       # %bb.0:1016; LA32SPIC-NEXT:    st.w $a2, $a0, 41017; LA32SPIC-NEXT:    st.w $a1, $a0, 01018; LA32SPIC-NEXT:    st.w $a2, $a0, 681019; LA32SPIC-NEXT:    st.w $a1, $a0, 641020; LA32SPIC-NEXT:    ret1021;1022; LA64NOPIC-LABEL: st_d:1023; LA64NOPIC:       # %bb.0:1024; LA64NOPIC-NEXT:    st.d $a1, $a0, 01025; LA64NOPIC-NEXT:    st.d $a1, $a0, 641026; LA64NOPIC-NEXT:    ret1027;1028; LA64PIC-LABEL: st_d:1029; LA64PIC:       # %bb.0:1030; LA64PIC-NEXT:    st.d $a1, $a0, 01031; LA64PIC-NEXT:    st.d $a1, $a0, 641032; LA64PIC-NEXT:    ret1033  store i64 %b, ptr %a1034  %1 = getelementptr i64, ptr %a, i64 81035  store i64 %b, ptr %11036  ret void1037}1038 1039define void @stx_b(ptr %dst, i64 %idx, i8 %val) nounwind {1040; LA32RNOPIC-LABEL: stx_b:1041; LA32RNOPIC:       # %bb.0:1042; LA32RNOPIC-NEXT:    add.w $a0, $a0, $a11043; LA32RNOPIC-NEXT:    st.b $a3, $a0, 01044; LA32RNOPIC-NEXT:    ret1045;1046; LA32SNOPIC-LABEL: stx_b:1047; LA32SNOPIC:       # %bb.0:1048; LA32SNOPIC-NEXT:    add.w $a0, $a0, $a11049; LA32SNOPIC-NEXT:    st.b $a3, $a0, 01050; LA32SNOPIC-NEXT:    ret1051;1052; LA32RPIC-LABEL: stx_b:1053; LA32RPIC:       # %bb.0:1054; LA32RPIC-NEXT:    add.w $a0, $a0, $a11055; LA32RPIC-NEXT:    st.b $a3, $a0, 01056; LA32RPIC-NEXT:    ret1057;1058; LA32SPIC-LABEL: stx_b:1059; LA32SPIC:       # %bb.0:1060; LA32SPIC-NEXT:    add.w $a0, $a0, $a11061; LA32SPIC-NEXT:    st.b $a3, $a0, 01062; LA32SPIC-NEXT:    ret1063;1064; LA64NOPIC-LABEL: stx_b:1065; LA64NOPIC:       # %bb.0:1066; LA64NOPIC-NEXT:    stx.b $a2, $a0, $a11067; LA64NOPIC-NEXT:    ret1068;1069; LA64PIC-LABEL: stx_b:1070; LA64PIC:       # %bb.0:1071; LA64PIC-NEXT:    stx.b $a2, $a0, $a11072; LA64PIC-NEXT:    ret1073  %1 = getelementptr i8, ptr %dst, i64 %idx1074  store i8 %val, ptr %11075  ret void1076}1077 1078define void @stx_h(ptr %dst, i64 %idx, i16 %val) nounwind {1079; LA32RNOPIC-LABEL: stx_h:1080; LA32RNOPIC:       # %bb.0:1081; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 11082; LA32RNOPIC-NEXT:    add.w $a0, $a0, $a11083; LA32RNOPIC-NEXT:    st.h $a3, $a0, 01084; LA32RNOPIC-NEXT:    ret1085;1086; LA32SNOPIC-LABEL: stx_h:1087; LA32SNOPIC:       # %bb.0:1088; LA32SNOPIC-NEXT:    alsl.w $a0, $a1, $a0, 11089; LA32SNOPIC-NEXT:    st.h $a3, $a0, 01090; LA32SNOPIC-NEXT:    ret1091;1092; LA32RPIC-LABEL: stx_h:1093; LA32RPIC:       # %bb.0:1094; LA32RPIC-NEXT:    slli.w $a1, $a1, 11095; LA32RPIC-NEXT:    add.w $a0, $a0, $a11096; LA32RPIC-NEXT:    st.h $a3, $a0, 01097; LA32RPIC-NEXT:    ret1098;1099; LA32SPIC-LABEL: stx_h:1100; LA32SPIC:       # %bb.0:1101; LA32SPIC-NEXT:    alsl.w $a0, $a1, $a0, 11102; LA32SPIC-NEXT:    st.h $a3, $a0, 01103; LA32SPIC-NEXT:    ret1104;1105; LA64NOPIC-LABEL: stx_h:1106; LA64NOPIC:       # %bb.0:1107; LA64NOPIC-NEXT:    slli.d $a1, $a1, 11108; LA64NOPIC-NEXT:    stx.h $a2, $a0, $a11109; LA64NOPIC-NEXT:    ret1110;1111; LA64PIC-LABEL: stx_h:1112; LA64PIC:       # %bb.0:1113; LA64PIC-NEXT:    slli.d $a1, $a1, 11114; LA64PIC-NEXT:    stx.h $a2, $a0, $a11115; LA64PIC-NEXT:    ret1116  %1 = getelementptr i16, ptr %dst, i64 %idx1117  store i16 %val, ptr %11118  ret void1119}1120 1121define void @stx_w(ptr %dst, i64 %idx, i32 %val) nounwind {1122; LA32RNOPIC-LABEL: stx_w:1123; LA32RNOPIC:       # %bb.0:1124; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 21125; LA32RNOPIC-NEXT:    add.w $a0, $a0, $a11126; LA32RNOPIC-NEXT:    st.w $a3, $a0, 01127; LA32RNOPIC-NEXT:    ret1128;1129; LA32SNOPIC-LABEL: stx_w:1130; LA32SNOPIC:       # %bb.0:1131; LA32SNOPIC-NEXT:    alsl.w $a0, $a1, $a0, 21132; LA32SNOPIC-NEXT:    st.w $a3, $a0, 01133; LA32SNOPIC-NEXT:    ret1134;1135; LA32RPIC-LABEL: stx_w:1136; LA32RPIC:       # %bb.0:1137; LA32RPIC-NEXT:    slli.w $a1, $a1, 21138; LA32RPIC-NEXT:    add.w $a0, $a0, $a11139; LA32RPIC-NEXT:    st.w $a3, $a0, 01140; LA32RPIC-NEXT:    ret1141;1142; LA32SPIC-LABEL: stx_w:1143; LA32SPIC:       # %bb.0:1144; LA32SPIC-NEXT:    alsl.w $a0, $a1, $a0, 21145; LA32SPIC-NEXT:    st.w $a3, $a0, 01146; LA32SPIC-NEXT:    ret1147;1148; LA64NOPIC-LABEL: stx_w:1149; LA64NOPIC:       # %bb.0:1150; LA64NOPIC-NEXT:    slli.d $a1, $a1, 21151; LA64NOPIC-NEXT:    stx.w $a2, $a0, $a11152; LA64NOPIC-NEXT:    ret1153;1154; LA64PIC-LABEL: stx_w:1155; LA64PIC:       # %bb.0:1156; LA64PIC-NEXT:    slli.d $a1, $a1, 21157; LA64PIC-NEXT:    stx.w $a2, $a0, $a11158; LA64PIC-NEXT:    ret1159  %1 = getelementptr i32, ptr %dst, i64 %idx1160  store i32 %val, ptr %11161  ret void1162}1163 1164define void @stx_d(ptr %dst, i64 %idx, i64 %val) nounwind {1165; LA32RNOPIC-LABEL: stx_d:1166; LA32RNOPIC:       # %bb.0:1167; LA32RNOPIC-NEXT:    slli.w $a1, $a1, 31168; LA32RNOPIC-NEXT:    add.w $a0, $a0, $a11169; LA32RNOPIC-NEXT:    st.w $a4, $a0, 41170; LA32RNOPIC-NEXT:    st.w $a3, $a0, 01171; LA32RNOPIC-NEXT:    ret1172;1173; LA32SNOPIC-LABEL: stx_d:1174; LA32SNOPIC:       # %bb.0:1175; LA32SNOPIC-NEXT:    alsl.w $a0, $a1, $a0, 31176; LA32SNOPIC-NEXT:    st.w $a4, $a0, 41177; LA32SNOPIC-NEXT:    st.w $a3, $a0, 01178; LA32SNOPIC-NEXT:    ret1179;1180; LA32RPIC-LABEL: stx_d:1181; LA32RPIC:       # %bb.0:1182; LA32RPIC-NEXT:    slli.w $a1, $a1, 31183; LA32RPIC-NEXT:    add.w $a0, $a0, $a11184; LA32RPIC-NEXT:    st.w $a4, $a0, 41185; LA32RPIC-NEXT:    st.w $a3, $a0, 01186; LA32RPIC-NEXT:    ret1187;1188; LA32SPIC-LABEL: stx_d:1189; LA32SPIC:       # %bb.0:1190; LA32SPIC-NEXT:    alsl.w $a0, $a1, $a0, 31191; LA32SPIC-NEXT:    st.w $a4, $a0, 41192; LA32SPIC-NEXT:    st.w $a3, $a0, 01193; LA32SPIC-NEXT:    ret1194;1195; LA64NOPIC-LABEL: stx_d:1196; LA64NOPIC:       # %bb.0:1197; LA64NOPIC-NEXT:    slli.d $a1, $a1, 31198; LA64NOPIC-NEXT:    stx.d $a2, $a0, $a11199; LA64NOPIC-NEXT:    ret1200;1201; LA64PIC-LABEL: stx_d:1202; LA64PIC:       # %bb.0:1203; LA64PIC-NEXT:    slli.d $a1, $a1, 31204; LA64PIC-NEXT:    stx.d $a2, $a0, $a11205; LA64PIC-NEXT:    ret1206  %1 = getelementptr i64, ptr %dst, i64 %idx1207  store i64 %val, ptr %11208  ret void1209}1210 1211;; Check load from and store to an i1 location.1212define i64 @load_sext_zext_anyext_i1(ptr %a) nounwind {1213  ;; sextload i11214; LA32RNOPIC-LABEL: load_sext_zext_anyext_i1:1215; LA32RNOPIC:       # %bb.0:1216; LA32RNOPIC-NEXT:    ld.bu $a1, $a0, 11217; LA32RNOPIC-NEXT:    ld.bu $a3, $a0, 21218; LA32RNOPIC-NEXT:    sub.w $a2, $a3, $a11219; LA32RNOPIC-NEXT:    ld.b $zero, $a0, 01220; LA32RNOPIC-NEXT:    sltu $a0, $a3, $a11221; LA32RNOPIC-NEXT:    sub.w $a1, $zero, $a01222; LA32RNOPIC-NEXT:    move $a0, $a21223; LA32RNOPIC-NEXT:    ret1224;1225; LA32SNOPIC-LABEL: load_sext_zext_anyext_i1:1226; LA32SNOPIC:       # %bb.0:1227; LA32SNOPIC-NEXT:    ld.bu $a1, $a0, 11228; LA32SNOPIC-NEXT:    ld.bu $a3, $a0, 21229; LA32SNOPIC-NEXT:    sub.w $a2, $a3, $a11230; LA32SNOPIC-NEXT:    ld.b $zero, $a0, 01231; LA32SNOPIC-NEXT:    sltu $a0, $a3, $a11232; LA32SNOPIC-NEXT:    sub.w $a1, $zero, $a01233; LA32SNOPIC-NEXT:    move $a0, $a21234; LA32SNOPIC-NEXT:    ret1235;1236; LA32RPIC-LABEL: load_sext_zext_anyext_i1:1237; LA32RPIC:       # %bb.0:1238; LA32RPIC-NEXT:    ld.bu $a1, $a0, 11239; LA32RPIC-NEXT:    ld.bu $a3, $a0, 21240; LA32RPIC-NEXT:    sub.w $a2, $a3, $a11241; LA32RPIC-NEXT:    ld.b $zero, $a0, 01242; LA32RPIC-NEXT:    sltu $a0, $a3, $a11243; LA32RPIC-NEXT:    sub.w $a1, $zero, $a01244; LA32RPIC-NEXT:    move $a0, $a21245; LA32RPIC-NEXT:    ret1246;1247; LA32SPIC-LABEL: load_sext_zext_anyext_i1:1248; LA32SPIC:       # %bb.0:1249; LA32SPIC-NEXT:    ld.bu $a1, $a0, 11250; LA32SPIC-NEXT:    ld.bu $a3, $a0, 21251; LA32SPIC-NEXT:    sub.w $a2, $a3, $a11252; LA32SPIC-NEXT:    ld.b $zero, $a0, 01253; LA32SPIC-NEXT:    sltu $a0, $a3, $a11254; LA32SPIC-NEXT:    sub.w $a1, $zero, $a01255; LA32SPIC-NEXT:    move $a0, $a21256; LA32SPIC-NEXT:    ret1257;1258; LA64NOPIC-LABEL: load_sext_zext_anyext_i1:1259; LA64NOPIC:       # %bb.0:1260; LA64NOPIC-NEXT:    ld.bu $a1, $a0, 11261; LA64NOPIC-NEXT:    ld.bu $a2, $a0, 21262; LA64NOPIC-NEXT:    ld.b $zero, $a0, 01263; LA64NOPIC-NEXT:    sub.d $a0, $a2, $a11264; LA64NOPIC-NEXT:    ret1265;1266; LA64PIC-LABEL: load_sext_zext_anyext_i1:1267; LA64PIC:       # %bb.0:1268; LA64PIC-NEXT:    ld.bu $a1, $a0, 11269; LA64PIC-NEXT:    ld.bu $a2, $a0, 21270; LA64PIC-NEXT:    ld.b $zero, $a0, 01271; LA64PIC-NEXT:    sub.d $a0, $a2, $a11272; LA64PIC-NEXT:    ret1273  %1 = getelementptr i1, ptr %a, i64 11274  %2 = load i1, ptr %11275  %3 = sext i1 %2 to i641276  ;; zextload i11277  %4 = getelementptr i1, ptr %a, i64 21278  %5 = load i1, ptr %41279  %6 = zext i1 %5 to i641280  %7 = add i64 %3, %61281  ;; extload i1 (anyext). Produced as the load is unused.1282  %8 = load volatile i1, ptr %a1283  ret i64 %71284}1285 1286define i16 @load_sext_zext_anyext_i1_i16(ptr %a) nounwind {1287  ;; sextload i11288; LA32RNOPIC-LABEL: load_sext_zext_anyext_i1_i16:1289; LA32RNOPIC:       # %bb.0:1290; LA32RNOPIC-NEXT:    ld.bu $a1, $a0, 11291; LA32RNOPIC-NEXT:    ld.bu $a2, $a0, 21292; LA32RNOPIC-NEXT:    ld.b $zero, $a0, 01293; LA32RNOPIC-NEXT:    sub.w $a0, $a2, $a11294; LA32RNOPIC-NEXT:    ret1295;1296; LA32SNOPIC-LABEL: load_sext_zext_anyext_i1_i16:1297; LA32SNOPIC:       # %bb.0:1298; LA32SNOPIC-NEXT:    ld.bu $a1, $a0, 11299; LA32SNOPIC-NEXT:    ld.bu $a2, $a0, 21300; LA32SNOPIC-NEXT:    ld.b $zero, $a0, 01301; LA32SNOPIC-NEXT:    sub.w $a0, $a2, $a11302; LA32SNOPIC-NEXT:    ret1303;1304; LA32RPIC-LABEL: load_sext_zext_anyext_i1_i16:1305; LA32RPIC:       # %bb.0:1306; LA32RPIC-NEXT:    ld.bu $a1, $a0, 11307; LA32RPIC-NEXT:    ld.bu $a2, $a0, 21308; LA32RPIC-NEXT:    ld.b $zero, $a0, 01309; LA32RPIC-NEXT:    sub.w $a0, $a2, $a11310; LA32RPIC-NEXT:    ret1311;1312; LA32SPIC-LABEL: load_sext_zext_anyext_i1_i16:1313; LA32SPIC:       # %bb.0:1314; LA32SPIC-NEXT:    ld.bu $a1, $a0, 11315; LA32SPIC-NEXT:    ld.bu $a2, $a0, 21316; LA32SPIC-NEXT:    ld.b $zero, $a0, 01317; LA32SPIC-NEXT:    sub.w $a0, $a2, $a11318; LA32SPIC-NEXT:    ret1319;1320; LA64NOPIC-LABEL: load_sext_zext_anyext_i1_i16:1321; LA64NOPIC:       # %bb.0:1322; LA64NOPIC-NEXT:    ld.bu $a1, $a0, 11323; LA64NOPIC-NEXT:    ld.bu $a2, $a0, 21324; LA64NOPIC-NEXT:    ld.b $zero, $a0, 01325; LA64NOPIC-NEXT:    sub.d $a0, $a2, $a11326; LA64NOPIC-NEXT:    ret1327;1328; LA64PIC-LABEL: load_sext_zext_anyext_i1_i16:1329; LA64PIC:       # %bb.0:1330; LA64PIC-NEXT:    ld.bu $a1, $a0, 11331; LA64PIC-NEXT:    ld.bu $a2, $a0, 21332; LA64PIC-NEXT:    ld.b $zero, $a0, 01333; LA64PIC-NEXT:    sub.d $a0, $a2, $a11334; LA64PIC-NEXT:    ret1335  %1 = getelementptr i1, ptr %a, i64 11336  %2 = load i1, ptr %11337  %3 = sext i1 %2 to i161338  ;; zextload i11339  %4 = getelementptr i1, ptr %a, i64 21340  %5 = load i1, ptr %41341  %6 = zext i1 %5 to i161342  %7 = add i16 %3, %61343  ;; extload i1 (anyext). Produced as the load is unused.1344  %8 = load volatile i1, ptr %a1345  ret i16 %71346}1347 1348define i64 @ld_sd_constant(i64 %a) nounwind {1349; LA32RNOPIC-LABEL: ld_sd_constant:1350; LA32RNOPIC:       # %bb.0:1351; LA32RNOPIC-NEXT:    lu12i.w $a3, -1364851352; LA32RNOPIC-NEXT:    ori $a4, $a3, 38231353; LA32RNOPIC-NEXT:    ld.w $a2, $a4, 01354; LA32RNOPIC-NEXT:    ori $a5, $a3, 38271355; LA32RNOPIC-NEXT:    ld.w $a3, $a5, 01356; LA32RNOPIC-NEXT:    st.w $a0, $a4, 01357; LA32RNOPIC-NEXT:    st.w $a1, $a5, 01358; LA32RNOPIC-NEXT:    move $a0, $a21359; LA32RNOPIC-NEXT:    move $a1, $a31360; LA32RNOPIC-NEXT:    ret1361;1362; LA32SNOPIC-LABEL: ld_sd_constant:1363; LA32SNOPIC:       # %bb.0:1364; LA32SNOPIC-NEXT:    lu12i.w $a3, -1364851365; LA32SNOPIC-NEXT:    ori $a4, $a3, 38231366; LA32SNOPIC-NEXT:    ld.w $a2, $a4, 01367; LA32SNOPIC-NEXT:    ori $a5, $a3, 38271368; LA32SNOPIC-NEXT:    ld.w $a3, $a5, 01369; LA32SNOPIC-NEXT:    st.w $a0, $a4, 01370; LA32SNOPIC-NEXT:    st.w $a1, $a5, 01371; LA32SNOPIC-NEXT:    move $a0, $a21372; LA32SNOPIC-NEXT:    move $a1, $a31373; LA32SNOPIC-NEXT:    ret1374;1375; LA32RPIC-LABEL: ld_sd_constant:1376; LA32RPIC:       # %bb.0:1377; LA32RPIC-NEXT:    lu12i.w $a3, -1364851378; LA32RPIC-NEXT:    ori $a4, $a3, 38231379; LA32RPIC-NEXT:    ld.w $a2, $a4, 01380; LA32RPIC-NEXT:    ori $a5, $a3, 38271381; LA32RPIC-NEXT:    ld.w $a3, $a5, 01382; LA32RPIC-NEXT:    st.w $a0, $a4, 01383; LA32RPIC-NEXT:    st.w $a1, $a5, 01384; LA32RPIC-NEXT:    move $a0, $a21385; LA32RPIC-NEXT:    move $a1, $a31386; LA32RPIC-NEXT:    ret1387;1388; LA32SPIC-LABEL: ld_sd_constant:1389; LA32SPIC:       # %bb.0:1390; LA32SPIC-NEXT:    lu12i.w $a3, -1364851391; LA32SPIC-NEXT:    ori $a4, $a3, 38231392; LA32SPIC-NEXT:    ld.w $a2, $a4, 01393; LA32SPIC-NEXT:    ori $a5, $a3, 38271394; LA32SPIC-NEXT:    ld.w $a3, $a5, 01395; LA32SPIC-NEXT:    st.w $a0, $a4, 01396; LA32SPIC-NEXT:    st.w $a1, $a5, 01397; LA32SPIC-NEXT:    move $a0, $a21398; LA32SPIC-NEXT:    move $a1, $a31399; LA32SPIC-NEXT:    ret1400;1401; LA64NOPIC-LABEL: ld_sd_constant:1402; LA64NOPIC:       # %bb.0:1403; LA64NOPIC-NEXT:    lu12i.w $a1, -1364851404; LA64NOPIC-NEXT:    ori $a2, $a1, 38231405; LA64NOPIC-NEXT:    bstrins.d $a2, $a2, 61, 321406; LA64NOPIC-NEXT:    ld.d $a1, $a2, 01407; LA64NOPIC-NEXT:    st.d $a0, $a2, 01408; LA64NOPIC-NEXT:    move $a0, $a11409; LA64NOPIC-NEXT:    ret1410;1411; LA64PIC-LABEL: ld_sd_constant:1412; LA64PIC:       # %bb.0:1413; LA64PIC-NEXT:    lu12i.w $a1, -1364851414; LA64PIC-NEXT:    ori $a2, $a1, 38231415; LA64PIC-NEXT:    bstrins.d $a2, $a2, 61, 321416; LA64PIC-NEXT:    ld.d $a1, $a2, 01417; LA64PIC-NEXT:    st.d $a0, $a2, 01418; LA64PIC-NEXT:    move $a0, $a11419; LA64PIC-NEXT:    ret1420  %1 = inttoptr i64 16045690984833335023 to ptr1421  %2 = load volatile i64, ptr %11422  store i64 %a, ptr %11423  ret i64 %21424}1425 1426;; Check load from and store to a float location.1427define float @load_store_float(ptr %a, float %b) nounwind {1428; ALL-LABEL: load_store_float:1429; ALL:       # %bb.0:1430; ALL-NEXT:    fld.s $fa1, $a0, 41431; ALL-NEXT:    fst.s $fa0, $a0, 41432; ALL-NEXT:    fmov.s $fa0, $fa11433; ALL-NEXT:    ret1434  %1 = getelementptr float, ptr %a, i64 11435  %2 = load float, ptr %11436  store float %b, ptr %11437  ret float %21438}1439 1440;; Check load from and store to a double location.1441define double @load_store_double(ptr %a, double %b) nounwind {1442; ALL-LABEL: load_store_double:1443; ALL:       # %bb.0:1444; ALL-NEXT:    fld.d $fa1, $a0, 81445; ALL-NEXT:    fst.d $fa0, $a0, 81446; ALL-NEXT:    fmov.d $fa0, $fa11447; ALL-NEXT:    ret1448  %1 = getelementptr double, ptr %a, i64 11449  %2 = load double, ptr %11450  store double %b, ptr %11451  ret double %21452}1453