1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA32PIC 3; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64PIC 4; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64LARGEPIC 5; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32NOPIC 6; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64NOPIC 7; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large < %s | FileCheck %s --check-prefix=LA64LARGENOPIC 8; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \ 9; RUN: | FileCheck %s --check-prefix=LA32DESC 10; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \ 11; RUN: | FileCheck %s --check-prefix=LA64DESC 12; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc \ 13; RUN: --code-model=large < %s | FileCheck %s --check-prefix=DESC64 14 15;; Check that TLS symbols are lowered correctly based on the specified 16;; model. Make sure they're external to avoid them all being optimised to Local 17;; Exec for the executable. 18 19@unspecified = external thread_local global i32 20@ld = external thread_local(localdynamic) global i32 21@ie = external thread_local(initialexec) global i32 22@le = external thread_local(localexec) global i32 23 24;; No model specified (global dynamic) 25 26define ptr @f1() nounwind { 27; LA32PIC-LABEL: f1: 28; LA32PIC: # %bb.0: # %entry 29; LA32PIC-NEXT: addi.w $sp, $sp, -16 30; LA32PIC-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 31; LA32PIC-NEXT: pcalau12i $a0, %gd_pc_hi20(unspecified) 32; LA32PIC-NEXT: addi.w $a0, $a0, %got_pc_lo12(unspecified) 33; LA32PIC-NEXT: bl %plt(__tls_get_addr) 34; LA32PIC-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 35; LA32PIC-NEXT: addi.w $sp, $sp, 16 36; LA32PIC-NEXT: ret 37; 38; LA64PIC-LABEL: f1: 39; LA64PIC: # %bb.0: # %entry 40; LA64PIC-NEXT: addi.d $sp, $sp, -16 41; LA64PIC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 42; LA64PIC-NEXT: pcalau12i $a0, %gd_pc_hi20(unspecified) 43; LA64PIC-NEXT: addi.d $a0, $a0, %got_pc_lo12(unspecified) 44; LA64PIC-NEXT: bl %plt(__tls_get_addr) 45; LA64PIC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 46; LA64PIC-NEXT: addi.d $sp, $sp, 16 47; LA64PIC-NEXT: ret 48; 49; LA64LARGEPIC-LABEL: f1: 50; LA64LARGEPIC: # %bb.0: # %entry 51; LA64LARGEPIC-NEXT: addi.d $sp, $sp, -16 52; LA64LARGEPIC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 53; LA64LARGEPIC-NEXT: pcalau12i $a0, %gd_pc_hi20(unspecified) 54; LA64LARGEPIC-NEXT: addi.d $a1, $zero, %got_pc_lo12(unspecified) 55; LA64LARGEPIC-NEXT: lu32i.d $a1, %got64_pc_lo20(unspecified) 56; LA64LARGEPIC-NEXT: lu52i.d $a1, $a1, %got64_pc_hi12(unspecified) 57; LA64LARGEPIC-NEXT: add.d $a0, $a1, $a0 58; LA64LARGEPIC-NEXT: pcalau12i $a1, %got_pc_hi20(__tls_get_addr) 59; LA64LARGEPIC-NEXT: addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr) 60; LA64LARGEPIC-NEXT: lu32i.d $ra, %got64_pc_lo20(__tls_get_addr) 61; LA64LARGEPIC-NEXT: lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr) 62; LA64LARGEPIC-NEXT: ldx.d $ra, $ra, $a1 63; LA64LARGEPIC-NEXT: jirl $ra, $ra, 0 64; LA64LARGEPIC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 65; LA64LARGEPIC-NEXT: addi.d $sp, $sp, 16 66; LA64LARGEPIC-NEXT: ret 67; 68; LA32NOPIC-LABEL: f1: 69; LA32NOPIC: # %bb.0: # %entry 70; LA32NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(unspecified) 71; LA32NOPIC-NEXT: ld.w $a0, $a0, %ie_pc_lo12(unspecified) 72; LA32NOPIC-NEXT: add.w $a0, $a0, $tp 73; LA32NOPIC-NEXT: ret 74; 75; LA64NOPIC-LABEL: f1: 76; LA64NOPIC: # %bb.0: # %entry 77; LA64NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(unspecified) 78; LA64NOPIC-NEXT: ld.d $a0, $a0, %ie_pc_lo12(unspecified) 79; LA64NOPIC-NEXT: add.d $a0, $a0, $tp 80; LA64NOPIC-NEXT: ret 81; 82; LA64LARGENOPIC-LABEL: f1: 83; LA64LARGENOPIC: # %bb.0: # %entry 84; LA64LARGENOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(unspecified) 85; LA64LARGENOPIC-NEXT: addi.d $a1, $zero, %ie_pc_lo12(unspecified) 86; LA64LARGENOPIC-NEXT: lu32i.d $a1, %ie64_pc_lo20(unspecified) 87; LA64LARGENOPIC-NEXT: lu52i.d $a1, $a1, %ie64_pc_hi12(unspecified) 88; LA64LARGENOPIC-NEXT: ldx.d $a0, $a1, $a0 89; LA64LARGENOPIC-NEXT: add.d $a0, $a0, $tp 90; LA64LARGENOPIC-NEXT: ret 91; 92; LA32DESC-LABEL: f1: 93; LA32DESC: # %bb.0: # %entry 94; LA32DESC-NEXT: addi.w $sp, $sp, -16 95; LA32DESC-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 96; LA32DESC-NEXT: pcalau12i $a0, %desc_pc_hi20(unspecified) 97; LA32DESC-NEXT: addi.w $a0, $a0, %desc_pc_lo12(unspecified) 98; LA32DESC-NEXT: ld.w $ra, $a0, %desc_ld(unspecified) 99; LA32DESC-NEXT: jirl $ra, $ra, %desc_call(unspecified) 100; LA32DESC-NEXT: add.w $a0, $a0, $tp 101; LA32DESC-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 102; LA32DESC-NEXT: addi.w $sp, $sp, 16 103; LA32DESC-NEXT: ret 104; 105; LA64DESC-LABEL: f1: 106; LA64DESC: # %bb.0: # %entry 107; LA64DESC-NEXT: addi.d $sp, $sp, -16 108; LA64DESC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 109; LA64DESC-NEXT: pcalau12i $a0, %desc_pc_hi20(unspecified) 110; LA64DESC-NEXT: addi.d $a0, $a0, %desc_pc_lo12(unspecified) 111; LA64DESC-NEXT: ld.d $ra, $a0, %desc_ld(unspecified) 112; LA64DESC-NEXT: jirl $ra, $ra, %desc_call(unspecified) 113; LA64DESC-NEXT: add.d $a0, $a0, $tp 114; LA64DESC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 115; LA64DESC-NEXT: addi.d $sp, $sp, 16 116; LA64DESC-NEXT: ret 117; 118; DESC64-LABEL: f1: 119; DESC64: # %bb.0: # %entry 120; DESC64-NEXT: addi.d $sp, $sp, -16 121; DESC64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 122; DESC64-NEXT: pcalau12i $a0, %desc_pc_hi20(unspecified) 123; DESC64-NEXT: addi.d $a1, $zero, %desc_pc_lo12(unspecified) 124; DESC64-NEXT: lu32i.d $a1, %desc64_pc_lo20(unspecified) 125; DESC64-NEXT: lu52i.d $a1, $a1, %desc64_pc_hi12(unspecified) 126; DESC64-NEXT: add.d $a0, $a0, $a1 127; DESC64-NEXT: ld.d $ra, $a0, %desc_ld(unspecified) 128; DESC64-NEXT: jirl $ra, $ra, %desc_call(unspecified) 129; DESC64-NEXT: add.d $a0, $a0, $tp 130; DESC64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 131; DESC64-NEXT: addi.d $sp, $sp, 16 132; DESC64-NEXT: ret 133entry: 134 ret ptr @unspecified 135} 136 137;; localdynamic specified 138 139define ptr @f2() nounwind { 140; LA32PIC-LABEL: f2: 141; LA32PIC: # %bb.0: # %entry 142; LA32PIC-NEXT: addi.w $sp, $sp, -16 143; LA32PIC-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 144; LA32PIC-NEXT: pcalau12i $a0, %ld_pc_hi20(ld) 145; LA32PIC-NEXT: addi.w $a0, $a0, %got_pc_lo12(ld) 146; LA32PIC-NEXT: bl %plt(__tls_get_addr) 147; LA32PIC-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 148; LA32PIC-NEXT: addi.w $sp, $sp, 16 149; LA32PIC-NEXT: ret 150; 151; LA64PIC-LABEL: f2: 152; LA64PIC: # %bb.0: # %entry 153; LA64PIC-NEXT: addi.d $sp, $sp, -16 154; LA64PIC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 155; LA64PIC-NEXT: pcalau12i $a0, %ld_pc_hi20(ld) 156; LA64PIC-NEXT: addi.d $a0, $a0, %got_pc_lo12(ld) 157; LA64PIC-NEXT: bl %plt(__tls_get_addr) 158; LA64PIC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 159; LA64PIC-NEXT: addi.d $sp, $sp, 16 160; LA64PIC-NEXT: ret 161; 162; LA64LARGEPIC-LABEL: f2: 163; LA64LARGEPIC: # %bb.0: # %entry 164; LA64LARGEPIC-NEXT: addi.d $sp, $sp, -16 165; LA64LARGEPIC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 166; LA64LARGEPIC-NEXT: pcalau12i $a0, %ld_pc_hi20(ld) 167; LA64LARGEPIC-NEXT: addi.d $a1, $zero, %got_pc_lo12(ld) 168; LA64LARGEPIC-NEXT: lu32i.d $a1, %got64_pc_lo20(ld) 169; LA64LARGEPIC-NEXT: lu52i.d $a1, $a1, %got64_pc_hi12(ld) 170; LA64LARGEPIC-NEXT: add.d $a0, $a1, $a0 171; LA64LARGEPIC-NEXT: pcalau12i $a1, %got_pc_hi20(__tls_get_addr) 172; LA64LARGEPIC-NEXT: addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr) 173; LA64LARGEPIC-NEXT: lu32i.d $ra, %got64_pc_lo20(__tls_get_addr) 174; LA64LARGEPIC-NEXT: lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr) 175; LA64LARGEPIC-NEXT: ldx.d $ra, $ra, $a1 176; LA64LARGEPIC-NEXT: jirl $ra, $ra, 0 177; LA64LARGEPIC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 178; LA64LARGEPIC-NEXT: addi.d $sp, $sp, 16 179; LA64LARGEPIC-NEXT: ret 180; 181; LA32NOPIC-LABEL: f2: 182; LA32NOPIC: # %bb.0: # %entry 183; LA32NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ld) 184; LA32NOPIC-NEXT: ld.w $a0, $a0, %ie_pc_lo12(ld) 185; LA32NOPIC-NEXT: add.w $a0, $a0, $tp 186; LA32NOPIC-NEXT: ret 187; 188; LA64NOPIC-LABEL: f2: 189; LA64NOPIC: # %bb.0: # %entry 190; LA64NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ld) 191; LA64NOPIC-NEXT: ld.d $a0, $a0, %ie_pc_lo12(ld) 192; LA64NOPIC-NEXT: add.d $a0, $a0, $tp 193; LA64NOPIC-NEXT: ret 194; 195; LA64LARGENOPIC-LABEL: f2: 196; LA64LARGENOPIC: # %bb.0: # %entry 197; LA64LARGENOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ld) 198; LA64LARGENOPIC-NEXT: addi.d $a1, $zero, %ie_pc_lo12(ld) 199; LA64LARGENOPIC-NEXT: lu32i.d $a1, %ie64_pc_lo20(ld) 200; LA64LARGENOPIC-NEXT: lu52i.d $a1, $a1, %ie64_pc_hi12(ld) 201; LA64LARGENOPIC-NEXT: ldx.d $a0, $a1, $a0 202; LA64LARGENOPIC-NEXT: add.d $a0, $a0, $tp 203; LA64LARGENOPIC-NEXT: ret 204; 205; LA32DESC-LABEL: f2: 206; LA32DESC: # %bb.0: # %entry 207; LA32DESC-NEXT: addi.w $sp, $sp, -16 208; LA32DESC-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 209; LA32DESC-NEXT: pcalau12i $a0, %desc_pc_hi20(ld) 210; LA32DESC-NEXT: addi.w $a0, $a0, %desc_pc_lo12(ld) 211; LA32DESC-NEXT: ld.w $ra, $a0, %desc_ld(ld) 212; LA32DESC-NEXT: jirl $ra, $ra, %desc_call(ld) 213; LA32DESC-NEXT: add.w $a0, $a0, $tp 214; LA32DESC-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 215; LA32DESC-NEXT: addi.w $sp, $sp, 16 216; LA32DESC-NEXT: ret 217; 218; LA64DESC-LABEL: f2: 219; LA64DESC: # %bb.0: # %entry 220; LA64DESC-NEXT: addi.d $sp, $sp, -16 221; LA64DESC-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 222; LA64DESC-NEXT: pcalau12i $a0, %desc_pc_hi20(ld) 223; LA64DESC-NEXT: addi.d $a0, $a0, %desc_pc_lo12(ld) 224; LA64DESC-NEXT: ld.d $ra, $a0, %desc_ld(ld) 225; LA64DESC-NEXT: jirl $ra, $ra, %desc_call(ld) 226; LA64DESC-NEXT: add.d $a0, $a0, $tp 227; LA64DESC-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 228; LA64DESC-NEXT: addi.d $sp, $sp, 16 229; LA64DESC-NEXT: ret 230; 231; DESC64-LABEL: f2: 232; DESC64: # %bb.0: # %entry 233; DESC64-NEXT: addi.d $sp, $sp, -16 234; DESC64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 235; DESC64-NEXT: pcalau12i $a0, %desc_pc_hi20(ld) 236; DESC64-NEXT: addi.d $a1, $zero, %desc_pc_lo12(ld) 237; DESC64-NEXT: lu32i.d $a1, %desc64_pc_lo20(ld) 238; DESC64-NEXT: lu52i.d $a1, $a1, %desc64_pc_hi12(ld) 239; DESC64-NEXT: add.d $a0, $a0, $a1 240; DESC64-NEXT: ld.d $ra, $a0, %desc_ld(ld) 241; DESC64-NEXT: jirl $ra, $ra, %desc_call(ld) 242; DESC64-NEXT: add.d $a0, $a0, $tp 243; DESC64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 244; DESC64-NEXT: addi.d $sp, $sp, 16 245; DESC64-NEXT: ret 246entry: 247 ret ptr @ld 248} 249 250;; initialexec specified 251 252define ptr @f3() nounwind { 253; LA32PIC-LABEL: f3: 254; LA32PIC: # %bb.0: # %entry 255; LA32PIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 256; LA32PIC-NEXT: ld.w $a0, $a0, %ie_pc_lo12(ie) 257; LA32PIC-NEXT: add.w $a0, $a0, $tp 258; LA32PIC-NEXT: ret 259; 260; LA64PIC-LABEL: f3: 261; LA64PIC: # %bb.0: # %entry 262; LA64PIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 263; LA64PIC-NEXT: ld.d $a0, $a0, %ie_pc_lo12(ie) 264; LA64PIC-NEXT: add.d $a0, $a0, $tp 265; LA64PIC-NEXT: ret 266; 267; LA64LARGEPIC-LABEL: f3: 268; LA64LARGEPIC: # %bb.0: # %entry 269; LA64LARGEPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 270; LA64LARGEPIC-NEXT: addi.d $a1, $zero, %ie_pc_lo12(ie) 271; LA64LARGEPIC-NEXT: lu32i.d $a1, %ie64_pc_lo20(ie) 272; LA64LARGEPIC-NEXT: lu52i.d $a1, $a1, %ie64_pc_hi12(ie) 273; LA64LARGEPIC-NEXT: ldx.d $a0, $a1, $a0 274; LA64LARGEPIC-NEXT: add.d $a0, $a0, $tp 275; LA64LARGEPIC-NEXT: ret 276; 277; LA32NOPIC-LABEL: f3: 278; LA32NOPIC: # %bb.0: # %entry 279; LA32NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 280; LA32NOPIC-NEXT: ld.w $a0, $a0, %ie_pc_lo12(ie) 281; LA32NOPIC-NEXT: add.w $a0, $a0, $tp 282; LA32NOPIC-NEXT: ret 283; 284; LA64NOPIC-LABEL: f3: 285; LA64NOPIC: # %bb.0: # %entry 286; LA64NOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 287; LA64NOPIC-NEXT: ld.d $a0, $a0, %ie_pc_lo12(ie) 288; LA64NOPIC-NEXT: add.d $a0, $a0, $tp 289; LA64NOPIC-NEXT: ret 290; 291; LA64LARGENOPIC-LABEL: f3: 292; LA64LARGENOPIC: # %bb.0: # %entry 293; LA64LARGENOPIC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 294; LA64LARGENOPIC-NEXT: addi.d $a1, $zero, %ie_pc_lo12(ie) 295; LA64LARGENOPIC-NEXT: lu32i.d $a1, %ie64_pc_lo20(ie) 296; LA64LARGENOPIC-NEXT: lu52i.d $a1, $a1, %ie64_pc_hi12(ie) 297; LA64LARGENOPIC-NEXT: ldx.d $a0, $a1, $a0 298; LA64LARGENOPIC-NEXT: add.d $a0, $a0, $tp 299; LA64LARGENOPIC-NEXT: ret 300; 301; LA32DESC-LABEL: f3: 302; LA32DESC: # %bb.0: # %entry 303; LA32DESC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 304; LA32DESC-NEXT: ld.w $a0, $a0, %ie_pc_lo12(ie) 305; LA32DESC-NEXT: add.w $a0, $a0, $tp 306; LA32DESC-NEXT: ret 307; 308; LA64DESC-LABEL: f3: 309; LA64DESC: # %bb.0: # %entry 310; LA64DESC-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 311; LA64DESC-NEXT: ld.d $a0, $a0, %ie_pc_lo12(ie) 312; LA64DESC-NEXT: add.d $a0, $a0, $tp 313; LA64DESC-NEXT: ret 314; 315; DESC64-LABEL: f3: 316; DESC64: # %bb.0: # %entry 317; DESC64-NEXT: pcalau12i $a0, %ie_pc_hi20(ie) 318; DESC64-NEXT: addi.d $a1, $zero, %ie_pc_lo12(ie) 319; DESC64-NEXT: lu32i.d $a1, %ie64_pc_lo20(ie) 320; DESC64-NEXT: lu52i.d $a1, $a1, %ie64_pc_hi12(ie) 321; DESC64-NEXT: ldx.d $a0, $a1, $a0 322; DESC64-NEXT: add.d $a0, $a0, $tp 323; DESC64-NEXT: ret 324entry: 325 ret ptr @ie 326} 327 328;; localexec specified 329 330define ptr @f4() nounwind { 331; LA32PIC-LABEL: f4: 332; LA32PIC: # %bb.0: # %entry 333; LA32PIC-NEXT: lu12i.w $a0, %le_hi20_r(le) 334; LA32PIC-NEXT: add.w $a0, $a0, $tp, %le_add_r(le) 335; LA32PIC-NEXT: addi.w $a0, $a0, %le_lo12_r(le) 336; LA32PIC-NEXT: ret 337; 338; LA64PIC-LABEL: f4: 339; LA64PIC: # %bb.0: # %entry 340; LA64PIC-NEXT: lu12i.w $a0, %le_hi20_r(le) 341; LA64PIC-NEXT: add.d $a0, $a0, $tp, %le_add_r(le) 342; LA64PIC-NEXT: addi.d $a0, $a0, %le_lo12_r(le) 343; LA64PIC-NEXT: ret 344; 345; LA64LARGEPIC-LABEL: f4: 346; LA64LARGEPIC: # %bb.0: # %entry 347; LA64LARGEPIC-NEXT: lu12i.w $a0, %le_hi20(le) 348; LA64LARGEPIC-NEXT: ori $a0, $a0, %le_lo12(le) 349; LA64LARGEPIC-NEXT: lu32i.d $a0, %le64_lo20(le) 350; LA64LARGEPIC-NEXT: lu52i.d $a0, $a0, %le64_hi12(le) 351; LA64LARGEPIC-NEXT: add.d $a0, $a0, $tp 352; LA64LARGEPIC-NEXT: ret 353; 354; LA32NOPIC-LABEL: f4: 355; LA32NOPIC: # %bb.0: # %entry 356; LA32NOPIC-NEXT: lu12i.w $a0, %le_hi20_r(le) 357; LA32NOPIC-NEXT: add.w $a0, $a0, $tp, %le_add_r(le) 358; LA32NOPIC-NEXT: addi.w $a0, $a0, %le_lo12_r(le) 359; LA32NOPIC-NEXT: ret 360; 361; LA64NOPIC-LABEL: f4: 362; LA64NOPIC: # %bb.0: # %entry 363; LA64NOPIC-NEXT: lu12i.w $a0, %le_hi20_r(le) 364; LA64NOPIC-NEXT: add.d $a0, $a0, $tp, %le_add_r(le) 365; LA64NOPIC-NEXT: addi.d $a0, $a0, %le_lo12_r(le) 366; LA64NOPIC-NEXT: ret 367; 368; LA64LARGENOPIC-LABEL: f4: 369; LA64LARGENOPIC: # %bb.0: # %entry 370; LA64LARGENOPIC-NEXT: lu12i.w $a0, %le_hi20(le) 371; LA64LARGENOPIC-NEXT: ori $a0, $a0, %le_lo12(le) 372; LA64LARGENOPIC-NEXT: lu32i.d $a0, %le64_lo20(le) 373; LA64LARGENOPIC-NEXT: lu52i.d $a0, $a0, %le64_hi12(le) 374; LA64LARGENOPIC-NEXT: add.d $a0, $a0, $tp 375; LA64LARGENOPIC-NEXT: ret 376; 377; LA32DESC-LABEL: f4: 378; LA32DESC: # %bb.0: # %entry 379; LA32DESC-NEXT: lu12i.w $a0, %le_hi20_r(le) 380; LA32DESC-NEXT: add.w $a0, $a0, $tp, %le_add_r(le) 381; LA32DESC-NEXT: addi.w $a0, $a0, %le_lo12_r(le) 382; LA32DESC-NEXT: ret 383; 384; LA64DESC-LABEL: f4: 385; LA64DESC: # %bb.0: # %entry 386; LA64DESC-NEXT: lu12i.w $a0, %le_hi20_r(le) 387; LA64DESC-NEXT: add.d $a0, $a0, $tp, %le_add_r(le) 388; LA64DESC-NEXT: addi.d $a0, $a0, %le_lo12_r(le) 389; LA64DESC-NEXT: ret 390; 391; DESC64-LABEL: f4: 392; DESC64: # %bb.0: # %entry 393; DESC64-NEXT: lu12i.w $a0, %le_hi20(le) 394; DESC64-NEXT: ori $a0, $a0, %le_lo12(le) 395; DESC64-NEXT: lu32i.d $a0, %le64_lo20(le) 396; DESC64-NEXT: lu52i.d $a0, $a0, %le64_hi12(le) 397; DESC64-NEXT: add.d $a0, $a0, $tp 398; DESC64-NEXT: ret 399entry: 400 ret ptr @le 401} 402