1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp 2; Run with --no_x86_scrub_rip because we care a lot about how globals are 3; accessed in the code model. 4 5; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=small | FileCheck %s --check-prefix=CHECK --check-prefix=SMALL-STATIC 6; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-STATIC 7; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-STATIC 8; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=small | FileCheck %s --check-prefix=CHECK --check-prefix=SMALL-PIC 9; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium -large-data-threshold=1000 | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-SMALL-DATA-PIC 10; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-PIC 11; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-PIC 12; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large -large-data-threshold=1000 | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-SMALL-DATA-PIC 13 14; Check that the relocations we emit are valid. 15; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=small -filetype=obj -o /dev/null 16; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=medium -filetype=obj -o /dev/null 17; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=large -filetype=obj -o /dev/null 18; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=small -filetype=obj -o /dev/null 19; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium -large-data-threshold=1000 -filetype=obj -o /dev/null 20; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium -filetype=obj -o /dev/null 21; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large -filetype=obj -o /dev/null 22; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large -large-data-threshold=1000 -filetype=obj -o /dev/null 23 24; Generated from this C source: 25; 26; static int static_data[10]; 27; int global_data[10] = {1, 2}; 28; extern int extern_data[10]; 29; 30; int *lea_static_data() { return &static_data[0]; } 31; int *lea_global_data() { return &global_data[0]; } 32; int *lea_extern_data() { return &extern_data[0]; } 33; 34; static void static_fn(void) {} 35; void global_fn(void) {} 36; void extern_fn(void); 37; 38; typedef void (*void_fn)(void); 39; void_fn lea_static_fn() { return &static_fn; } 40; void_fn lea_global_fn() { return &global_fn; } 41; void_fn lea_extern_fn() { return &extern_fn; } 42 43 44; ModuleID = 'model.c' 45source_filename = "model.c" 46target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 47target triple = "x86_64--linux" 48 49%t = type opaque 50 51@global_data = dso_local global [10 x i32] [i32 1, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0], align 16 52@static_data = internal global [10 x i32] zeroinitializer, align 16 53@static_data_alias = internal constant ptr getelementptr inbounds ([10 x i32], ptr @static_data, i64 0, i64 2), align 8 54@extern_data = external global [10 x i32], align 16 55@thread_data = external thread_local global i32, align 4 56@unknown_size_data = dso_local global [0 x i32] zeroinitializer, align 16 57@bool = dso_local global i1 false 58@opaque = external dso_local global %t 59@forced_small_data = dso_local global [10 x i32] zeroinitializer, code_model "small", align 16 60@forced_large_data = dso_local global [10 x i32] zeroinitializer, code_model "large", align 16 61@__ehdr_start = external dso_local global i8 62@__start_foo = external dso_local global i8 63@__stop_foo = external dso_local global i8 64 65define dso_local ptr @lea_static_data() #0 { 66; SMALL-STATIC-LABEL: lea_static_data: 67; SMALL-STATIC: # %bb.0: 68; SMALL-STATIC-NEXT: movl $static_data, %eax 69; SMALL-STATIC-NEXT: retq 70; 71; MEDIUM-STATIC-LABEL: lea_static_data: 72; MEDIUM-STATIC: # %bb.0: 73; MEDIUM-STATIC-NEXT: movabsq $static_data, %rax 74; MEDIUM-STATIC-NEXT: retq 75; 76; LARGE-STATIC-LABEL: lea_static_data: 77; LARGE-STATIC: # %bb.0: 78; LARGE-STATIC-NEXT: movabsq $static_data, %rax 79; LARGE-STATIC-NEXT: retq 80; 81; SMALL-PIC-LABEL: lea_static_data: 82; SMALL-PIC: # %bb.0: 83; SMALL-PIC-NEXT: leaq static_data(%rip), %rax 84; SMALL-PIC-NEXT: retq 85; 86; MEDIUM-SMALL-DATA-PIC-LABEL: lea_static_data: 87; MEDIUM-SMALL-DATA-PIC: # %bb.0: 88; MEDIUM-SMALL-DATA-PIC-NEXT: leaq static_data(%rip), %rax 89; MEDIUM-SMALL-DATA-PIC-NEXT: retq 90; 91; MEDIUM-PIC-LABEL: lea_static_data: 92; MEDIUM-PIC: # %bb.0: 93; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 94; MEDIUM-PIC-NEXT: movabsq $static_data@GOTOFF, %rax 95; MEDIUM-PIC-NEXT: addq %rcx, %rax 96; MEDIUM-PIC-NEXT: retq 97; 98; LARGE-PIC-LABEL: lea_static_data: 99; LARGE-PIC: # %bb.0: 100; LARGE-PIC-NEXT: .L0$pb: 101; LARGE-PIC-NEXT: leaq .L0$pb(%rip), %rax 102; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx 103; LARGE-PIC-NEXT: addq %rax, %rcx 104; LARGE-PIC-NEXT: movabsq $static_data@GOTOFF, %rax 105; LARGE-PIC-NEXT: addq %rcx, %rax 106; LARGE-PIC-NEXT: retq 107; 108; LARGE-SMALL-DATA-PIC-LABEL: lea_static_data: 109; LARGE-SMALL-DATA-PIC: # %bb.0: 110; LARGE-SMALL-DATA-PIC-NEXT: .L0$pb: 111; LARGE-SMALL-DATA-PIC-NEXT: leaq .L0$pb(%rip), %rax 112; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx 113; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 114; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_data@GOTOFF, %rax 115; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 116; LARGE-SMALL-DATA-PIC-NEXT: retq 117 ret ptr @static_data 118} 119 120define dso_local ptr @lea_static_data_alias() #0 { 121; SMALL-STATIC-LABEL: lea_static_data_alias: 122; SMALL-STATIC: # %bb.0: 123; SMALL-STATIC-NEXT: movl $static_data_alias, %eax 124; SMALL-STATIC-NEXT: retq 125; 126; MEDIUM-STATIC-LABEL: lea_static_data_alias: 127; MEDIUM-STATIC: # %bb.0: 128; MEDIUM-STATIC-NEXT: movabsq $static_data_alias, %rax 129; MEDIUM-STATIC-NEXT: retq 130; 131; LARGE-STATIC-LABEL: lea_static_data_alias: 132; LARGE-STATIC: # %bb.0: 133; LARGE-STATIC-NEXT: movabsq $static_data_alias, %rax 134; LARGE-STATIC-NEXT: retq 135; 136; SMALL-PIC-LABEL: lea_static_data_alias: 137; SMALL-PIC: # %bb.0: 138; SMALL-PIC-NEXT: leaq static_data_alias(%rip), %rax 139; SMALL-PIC-NEXT: retq 140; 141; MEDIUM-SMALL-DATA-PIC-LABEL: lea_static_data_alias: 142; MEDIUM-SMALL-DATA-PIC: # %bb.0: 143; MEDIUM-SMALL-DATA-PIC-NEXT: leaq static_data_alias(%rip), %rax 144; MEDIUM-SMALL-DATA-PIC-NEXT: retq 145; 146; MEDIUM-PIC-LABEL: lea_static_data_alias: 147; MEDIUM-PIC: # %bb.0: 148; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 149; MEDIUM-PIC-NEXT: movabsq $static_data_alias@GOTOFF, %rax 150; MEDIUM-PIC-NEXT: addq %rcx, %rax 151; MEDIUM-PIC-NEXT: retq 152; 153; LARGE-PIC-LABEL: lea_static_data_alias: 154; LARGE-PIC: # %bb.0: 155; LARGE-PIC-NEXT: .L1$pb: 156; LARGE-PIC-NEXT: leaq .L1$pb(%rip), %rax 157; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx 158; LARGE-PIC-NEXT: addq %rax, %rcx 159; LARGE-PIC-NEXT: movabsq $static_data_alias@GOTOFF, %rax 160; LARGE-PIC-NEXT: addq %rcx, %rax 161; LARGE-PIC-NEXT: retq 162; 163; LARGE-SMALL-DATA-PIC-LABEL: lea_static_data_alias: 164; LARGE-SMALL-DATA-PIC: # %bb.0: 165; LARGE-SMALL-DATA-PIC-NEXT: .L1$pb: 166; LARGE-SMALL-DATA-PIC-NEXT: leaq .L1$pb(%rip), %rax 167; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx 168; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 169; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_data_alias@GOTOFF, %rax 170; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 171; LARGE-SMALL-DATA-PIC-NEXT: retq 172 ret ptr @static_data_alias 173} 174 175define dso_local ptr @lea_global_data() #0 { 176; SMALL-STATIC-LABEL: lea_global_data: 177; SMALL-STATIC: # %bb.0: 178; SMALL-STATIC-NEXT: movl $global_data, %eax 179; SMALL-STATIC-NEXT: retq 180; 181; MEDIUM-STATIC-LABEL: lea_global_data: 182; MEDIUM-STATIC: # %bb.0: 183; MEDIUM-STATIC-NEXT: movabsq $global_data, %rax 184; MEDIUM-STATIC-NEXT: retq 185; 186; LARGE-STATIC-LABEL: lea_global_data: 187; LARGE-STATIC: # %bb.0: 188; LARGE-STATIC-NEXT: movabsq $global_data, %rax 189; LARGE-STATIC-NEXT: retq 190; 191; SMALL-PIC-LABEL: lea_global_data: 192; SMALL-PIC: # %bb.0: 193; SMALL-PIC-NEXT: leaq global_data(%rip), %rax 194; SMALL-PIC-NEXT: retq 195; 196; MEDIUM-SMALL-DATA-PIC-LABEL: lea_global_data: 197; MEDIUM-SMALL-DATA-PIC: # %bb.0: 198; MEDIUM-SMALL-DATA-PIC-NEXT: leaq global_data(%rip), %rax 199; MEDIUM-SMALL-DATA-PIC-NEXT: retq 200; 201; MEDIUM-PIC-LABEL: lea_global_data: 202; MEDIUM-PIC: # %bb.0: 203; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 204; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rax 205; MEDIUM-PIC-NEXT: addq %rcx, %rax 206; MEDIUM-PIC-NEXT: retq 207; 208; LARGE-PIC-LABEL: lea_global_data: 209; LARGE-PIC: # %bb.0: 210; LARGE-PIC-NEXT: .L2$pb: 211; LARGE-PIC-NEXT: leaq .L2$pb(%rip), %rax 212; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2$pb, %rcx 213; LARGE-PIC-NEXT: addq %rax, %rcx 214; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax 215; LARGE-PIC-NEXT: addq %rcx, %rax 216; LARGE-PIC-NEXT: retq 217; 218; LARGE-SMALL-DATA-PIC-LABEL: lea_global_data: 219; LARGE-SMALL-DATA-PIC: # %bb.0: 220; LARGE-SMALL-DATA-PIC-NEXT: .L2$pb: 221; LARGE-SMALL-DATA-PIC-NEXT: leaq .L2$pb(%rip), %rax 222; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2$pb, %rcx 223; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 224; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_data@GOTOFF, %rax 225; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 226; LARGE-SMALL-DATA-PIC-NEXT: retq 227 ret ptr @global_data 228} 229 230define dso_local ptr @lea_extern_data() #0 { 231; SMALL-STATIC-LABEL: lea_extern_data: 232; SMALL-STATIC: # %bb.0: 233; SMALL-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 234; SMALL-STATIC-NEXT: retq 235; 236; MEDIUM-STATIC-LABEL: lea_extern_data: 237; MEDIUM-STATIC: # %bb.0: 238; MEDIUM-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 239; MEDIUM-STATIC-NEXT: retq 240; 241; LARGE-STATIC-LABEL: lea_extern_data: 242; LARGE-STATIC: # %bb.0: 243; LARGE-STATIC-NEXT: movabsq $extern_data, %rax 244; LARGE-STATIC-NEXT: retq 245; 246; SMALL-PIC-LABEL: lea_extern_data: 247; SMALL-PIC: # %bb.0: 248; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 249; SMALL-PIC-NEXT: retq 250; 251; MEDIUM-SMALL-DATA-PIC-LABEL: lea_extern_data: 252; MEDIUM-SMALL-DATA-PIC: # %bb.0: 253; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 254; MEDIUM-SMALL-DATA-PIC-NEXT: retq 255; 256; MEDIUM-PIC-LABEL: lea_extern_data: 257; MEDIUM-PIC: # %bb.0: 258; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 259; MEDIUM-PIC-NEXT: retq 260; 261; LARGE-PIC-LABEL: lea_extern_data: 262; LARGE-PIC: # %bb.0: 263; LARGE-PIC-NEXT: .L3$pb: 264; LARGE-PIC-NEXT: leaq .L3$pb(%rip), %rax 265; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3$pb, %rcx 266; LARGE-PIC-NEXT: addq %rax, %rcx 267; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax 268; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax 269; LARGE-PIC-NEXT: retq 270; 271; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_data: 272; LARGE-SMALL-DATA-PIC: # %bb.0: 273; LARGE-SMALL-DATA-PIC-NEXT: .L3$pb: 274; LARGE-SMALL-DATA-PIC-NEXT: leaq .L3$pb(%rip), %rax 275; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3$pb, %rcx 276; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 277; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_data@GOT, %rax 278; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax 279; LARGE-SMALL-DATA-PIC-NEXT: retq 280 ret ptr @extern_data 281} 282 283define dso_local ptr @lea_unknown_size_data() #0 { 284; SMALL-STATIC-LABEL: lea_unknown_size_data: 285; SMALL-STATIC: # %bb.0: 286; SMALL-STATIC-NEXT: movl $unknown_size_data, %eax 287; SMALL-STATIC-NEXT: retq 288; 289; MEDIUM-STATIC-LABEL: lea_unknown_size_data: 290; MEDIUM-STATIC: # %bb.0: 291; MEDIUM-STATIC-NEXT: movabsq $unknown_size_data, %rax 292; MEDIUM-STATIC-NEXT: retq 293; 294; LARGE-STATIC-LABEL: lea_unknown_size_data: 295; LARGE-STATIC: # %bb.0: 296; LARGE-STATIC-NEXT: movabsq $unknown_size_data, %rax 297; LARGE-STATIC-NEXT: retq 298; 299; SMALL-PIC-LABEL: lea_unknown_size_data: 300; SMALL-PIC: # %bb.0: 301; SMALL-PIC-NEXT: leaq unknown_size_data(%rip), %rax 302; SMALL-PIC-NEXT: retq 303; 304; MEDIUM-SMALL-DATA-PIC-LABEL: lea_unknown_size_data: 305; MEDIUM-SMALL-DATA-PIC: # %bb.0: 306; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 307; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 308; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 309; MEDIUM-SMALL-DATA-PIC-NEXT: retq 310; 311; MEDIUM-PIC-LABEL: lea_unknown_size_data: 312; MEDIUM-PIC: # %bb.0: 313; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 314; MEDIUM-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 315; MEDIUM-PIC-NEXT: addq %rcx, %rax 316; MEDIUM-PIC-NEXT: retq 317; 318; LARGE-PIC-LABEL: lea_unknown_size_data: 319; LARGE-PIC: # %bb.0: 320; LARGE-PIC-NEXT: .L4$pb: 321; LARGE-PIC-NEXT: leaq .L4$pb(%rip), %rax 322; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4$pb, %rcx 323; LARGE-PIC-NEXT: addq %rax, %rcx 324; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 325; LARGE-PIC-NEXT: addq %rcx, %rax 326; LARGE-PIC-NEXT: retq 327; 328; LARGE-SMALL-DATA-PIC-LABEL: lea_unknown_size_data: 329; LARGE-SMALL-DATA-PIC: # %bb.0: 330; LARGE-SMALL-DATA-PIC-NEXT: .L4$pb: 331; LARGE-SMALL-DATA-PIC-NEXT: leaq .L4$pb(%rip), %rax 332; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4$pb, %rcx 333; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 334; LARGE-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 335; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 336; LARGE-SMALL-DATA-PIC-NEXT: retq 337 ret ptr @unknown_size_data 338} 339 340define dso_local ptr @lea_forced_small_data() #0 { 341; SMALL-STATIC-LABEL: lea_forced_small_data: 342; SMALL-STATIC: # %bb.0: 343; SMALL-STATIC-NEXT: movl $forced_small_data, %eax 344; SMALL-STATIC-NEXT: retq 345; 346; MEDIUM-STATIC-LABEL: lea_forced_small_data: 347; MEDIUM-STATIC: # %bb.0: 348; MEDIUM-STATIC-NEXT: movl $forced_small_data, %eax 349; MEDIUM-STATIC-NEXT: retq 350; 351; LARGE-STATIC-LABEL: lea_forced_small_data: 352; LARGE-STATIC: # %bb.0: 353; LARGE-STATIC-NEXT: movabsq $forced_small_data, %rax 354; LARGE-STATIC-NEXT: retq 355; 356; SMALL-PIC-LABEL: lea_forced_small_data: 357; SMALL-PIC: # %bb.0: 358; SMALL-PIC-NEXT: leaq forced_small_data(%rip), %rax 359; SMALL-PIC-NEXT: retq 360; 361; MEDIUM-SMALL-DATA-PIC-LABEL: lea_forced_small_data: 362; MEDIUM-SMALL-DATA-PIC: # %bb.0: 363; MEDIUM-SMALL-DATA-PIC-NEXT: leaq forced_small_data(%rip), %rax 364; MEDIUM-SMALL-DATA-PIC-NEXT: retq 365; 366; MEDIUM-PIC-LABEL: lea_forced_small_data: 367; MEDIUM-PIC: # %bb.0: 368; MEDIUM-PIC-NEXT: leaq forced_small_data(%rip), %rax 369; MEDIUM-PIC-NEXT: retq 370; 371; LARGE-PIC-LABEL: lea_forced_small_data: 372; LARGE-PIC: # %bb.0: 373; LARGE-PIC-NEXT: .L5$pb: 374; LARGE-PIC-NEXT: leaq .L5$pb(%rip), %rax 375; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5$pb, %rcx 376; LARGE-PIC-NEXT: addq %rax, %rcx 377; LARGE-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax 378; LARGE-PIC-NEXT: addq %rcx, %rax 379; LARGE-PIC-NEXT: retq 380; 381; LARGE-SMALL-DATA-PIC-LABEL: lea_forced_small_data: 382; LARGE-SMALL-DATA-PIC: # %bb.0: 383; LARGE-SMALL-DATA-PIC-NEXT: .L5$pb: 384; LARGE-SMALL-DATA-PIC-NEXT: leaq .L5$pb(%rip), %rax 385; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5$pb, %rcx 386; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 387; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax 388; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 389; LARGE-SMALL-DATA-PIC-NEXT: retq 390 ret ptr @forced_small_data 391} 392 393define dso_local i32 @load_forced_small_data() #0 { 394; SMALL-STATIC-LABEL: load_forced_small_data: 395; SMALL-STATIC: # %bb.0: 396; SMALL-STATIC-NEXT: movl forced_small_data+8(%rip), %eax 397; SMALL-STATIC-NEXT: retq 398; 399; MEDIUM-STATIC-LABEL: load_forced_small_data: 400; MEDIUM-STATIC: # %bb.0: 401; MEDIUM-STATIC-NEXT: movl forced_small_data+8(%rip), %eax 402; MEDIUM-STATIC-NEXT: retq 403; 404; LARGE-STATIC-LABEL: load_forced_small_data: 405; LARGE-STATIC: # %bb.0: 406; LARGE-STATIC-NEXT: movabsq $forced_small_data+8, %rax 407; LARGE-STATIC-NEXT: movl (%rax), %eax 408; LARGE-STATIC-NEXT: retq 409; 410; SMALL-PIC-LABEL: load_forced_small_data: 411; SMALL-PIC: # %bb.0: 412; SMALL-PIC-NEXT: movl forced_small_data+8(%rip), %eax 413; SMALL-PIC-NEXT: retq 414; 415; MEDIUM-SMALL-DATA-PIC-LABEL: load_forced_small_data: 416; MEDIUM-SMALL-DATA-PIC: # %bb.0: 417; MEDIUM-SMALL-DATA-PIC-NEXT: movl forced_small_data+8(%rip), %eax 418; MEDIUM-SMALL-DATA-PIC-NEXT: retq 419; 420; MEDIUM-PIC-LABEL: load_forced_small_data: 421; MEDIUM-PIC: # %bb.0: 422; MEDIUM-PIC-NEXT: movl forced_small_data+8(%rip), %eax 423; MEDIUM-PIC-NEXT: retq 424; 425; LARGE-PIC-LABEL: load_forced_small_data: 426; LARGE-PIC: # %bb.0: 427; LARGE-PIC-NEXT: .L6$pb: 428; LARGE-PIC-NEXT: leaq .L6$pb(%rip), %rax 429; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6$pb, %rcx 430; LARGE-PIC-NEXT: addq %rax, %rcx 431; LARGE-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax 432; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax 433; LARGE-PIC-NEXT: retq 434; 435; LARGE-SMALL-DATA-PIC-LABEL: load_forced_small_data: 436; LARGE-SMALL-DATA-PIC: # %bb.0: 437; LARGE-SMALL-DATA-PIC-NEXT: .L6$pb: 438; LARGE-SMALL-DATA-PIC-NEXT: leaq .L6$pb(%rip), %rax 439; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6$pb, %rcx 440; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 441; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax 442; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax 443; LARGE-SMALL-DATA-PIC-NEXT: retq 444 %rv = load i32, ptr getelementptr inbounds (i32, ptr @forced_small_data, i64 2) 445 ret i32 %rv 446} 447 448define dso_local ptr @lea_forced_large_data() #0 { 449; SMALL-STATIC-LABEL: lea_forced_large_data: 450; SMALL-STATIC: # %bb.0: 451; SMALL-STATIC-NEXT: movabsq $forced_large_data, %rax 452; SMALL-STATIC-NEXT: retq 453; 454; MEDIUM-STATIC-LABEL: lea_forced_large_data: 455; MEDIUM-STATIC: # %bb.0: 456; MEDIUM-STATIC-NEXT: movabsq $forced_large_data, %rax 457; MEDIUM-STATIC-NEXT: retq 458; 459; LARGE-STATIC-LABEL: lea_forced_large_data: 460; LARGE-STATIC: # %bb.0: 461; LARGE-STATIC-NEXT: movabsq $forced_large_data, %rax 462; LARGE-STATIC-NEXT: retq 463; 464; SMALL-PIC-LABEL: lea_forced_large_data: 465; SMALL-PIC: # %bb.0: 466; SMALL-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 467; SMALL-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 468; SMALL-PIC-NEXT: addq %rcx, %rax 469; SMALL-PIC-NEXT: retq 470; 471; MEDIUM-SMALL-DATA-PIC-LABEL: lea_forced_large_data: 472; MEDIUM-SMALL-DATA-PIC: # %bb.0: 473; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 474; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 475; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 476; MEDIUM-SMALL-DATA-PIC-NEXT: retq 477; 478; MEDIUM-PIC-LABEL: lea_forced_large_data: 479; MEDIUM-PIC: # %bb.0: 480; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 481; MEDIUM-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 482; MEDIUM-PIC-NEXT: addq %rcx, %rax 483; MEDIUM-PIC-NEXT: retq 484; 485; LARGE-PIC-LABEL: lea_forced_large_data: 486; LARGE-PIC: # %bb.0: 487; LARGE-PIC-NEXT: .L7$pb: 488; LARGE-PIC-NEXT: leaq .L7$pb(%rip), %rax 489; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L7$pb, %rcx 490; LARGE-PIC-NEXT: addq %rax, %rcx 491; LARGE-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 492; LARGE-PIC-NEXT: addq %rcx, %rax 493; LARGE-PIC-NEXT: retq 494; 495; LARGE-SMALL-DATA-PIC-LABEL: lea_forced_large_data: 496; LARGE-SMALL-DATA-PIC: # %bb.0: 497; LARGE-SMALL-DATA-PIC-NEXT: .L7$pb: 498; LARGE-SMALL-DATA-PIC-NEXT: leaq .L7$pb(%rip), %rax 499; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L7$pb, %rcx 500; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 501; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 502; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 503; LARGE-SMALL-DATA-PIC-NEXT: retq 504 ret ptr @forced_large_data 505} 506 507define dso_local i32 @load_forced_large_data() #0 { 508; SMALL-STATIC-LABEL: load_forced_large_data: 509; SMALL-STATIC: # %bb.0: 510; SMALL-STATIC-NEXT: movabsq $forced_large_data+8, %rax 511; SMALL-STATIC-NEXT: movl (%rax), %eax 512; SMALL-STATIC-NEXT: retq 513; 514; MEDIUM-STATIC-LABEL: load_forced_large_data: 515; MEDIUM-STATIC: # %bb.0: 516; MEDIUM-STATIC-NEXT: movabsq $forced_large_data+8, %rax 517; MEDIUM-STATIC-NEXT: movl (%rax), %eax 518; MEDIUM-STATIC-NEXT: retq 519; 520; LARGE-STATIC-LABEL: load_forced_large_data: 521; LARGE-STATIC: # %bb.0: 522; LARGE-STATIC-NEXT: movabsq $forced_large_data+8, %rax 523; LARGE-STATIC-NEXT: movl (%rax), %eax 524; LARGE-STATIC-NEXT: retq 525; 526; SMALL-PIC-LABEL: load_forced_large_data: 527; SMALL-PIC: # %bb.0: 528; SMALL-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 529; SMALL-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx 530; SMALL-PIC-NEXT: movl 8(%rax,%rcx), %eax 531; SMALL-PIC-NEXT: retq 532; 533; MEDIUM-SMALL-DATA-PIC-LABEL: load_forced_large_data: 534; MEDIUM-SMALL-DATA-PIC: # %bb.0: 535; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 536; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx 537; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax,%rcx), %eax 538; MEDIUM-SMALL-DATA-PIC-NEXT: retq 539; 540; MEDIUM-PIC-LABEL: load_forced_large_data: 541; MEDIUM-PIC: # %bb.0: 542; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 543; MEDIUM-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx 544; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax 545; MEDIUM-PIC-NEXT: retq 546; 547; LARGE-PIC-LABEL: load_forced_large_data: 548; LARGE-PIC: # %bb.0: 549; LARGE-PIC-NEXT: .L8$pb: 550; LARGE-PIC-NEXT: leaq .L8$pb(%rip), %rax 551; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L8$pb, %rcx 552; LARGE-PIC-NEXT: addq %rax, %rcx 553; LARGE-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 554; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax 555; LARGE-PIC-NEXT: retq 556; 557; LARGE-SMALL-DATA-PIC-LABEL: load_forced_large_data: 558; LARGE-SMALL-DATA-PIC: # %bb.0: 559; LARGE-SMALL-DATA-PIC-NEXT: .L8$pb: 560; LARGE-SMALL-DATA-PIC-NEXT: leaq .L8$pb(%rip), %rax 561; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L8$pb, %rcx 562; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 563; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax 564; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax 565; LARGE-SMALL-DATA-PIC-NEXT: retq 566 %rv = load i32, ptr getelementptr inbounds (i32, ptr @forced_large_data, i64 2) 567 ret i32 %rv 568} 569 570define dso_local i32 @load_global_data() #0 { 571; SMALL-STATIC-LABEL: load_global_data: 572; SMALL-STATIC: # %bb.0: 573; SMALL-STATIC-NEXT: movl global_data+8(%rip), %eax 574; SMALL-STATIC-NEXT: retq 575; 576; MEDIUM-STATIC-LABEL: load_global_data: 577; MEDIUM-STATIC: # %bb.0: 578; MEDIUM-STATIC-NEXT: movabsq $global_data+8, %rax 579; MEDIUM-STATIC-NEXT: movl (%rax), %eax 580; MEDIUM-STATIC-NEXT: retq 581; 582; LARGE-STATIC-LABEL: load_global_data: 583; LARGE-STATIC: # %bb.0: 584; LARGE-STATIC-NEXT: movabsq $global_data+8, %rax 585; LARGE-STATIC-NEXT: movl (%rax), %eax 586; LARGE-STATIC-NEXT: retq 587; 588; SMALL-PIC-LABEL: load_global_data: 589; SMALL-PIC: # %bb.0: 590; SMALL-PIC-NEXT: movl global_data+8(%rip), %eax 591; SMALL-PIC-NEXT: retq 592; 593; MEDIUM-SMALL-DATA-PIC-LABEL: load_global_data: 594; MEDIUM-SMALL-DATA-PIC: # %bb.0: 595; MEDIUM-SMALL-DATA-PIC-NEXT: movl global_data+8(%rip), %eax 596; MEDIUM-SMALL-DATA-PIC-NEXT: retq 597; 598; MEDIUM-PIC-LABEL: load_global_data: 599; MEDIUM-PIC: # %bb.0: 600; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 601; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rcx 602; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax 603; MEDIUM-PIC-NEXT: retq 604; 605; LARGE-PIC-LABEL: load_global_data: 606; LARGE-PIC: # %bb.0: 607; LARGE-PIC-NEXT: .L9$pb: 608; LARGE-PIC-NEXT: leaq .L9$pb(%rip), %rax 609; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L9$pb, %rcx 610; LARGE-PIC-NEXT: addq %rax, %rcx 611; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax 612; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax 613; LARGE-PIC-NEXT: retq 614; 615; LARGE-SMALL-DATA-PIC-LABEL: load_global_data: 616; LARGE-SMALL-DATA-PIC: # %bb.0: 617; LARGE-SMALL-DATA-PIC-NEXT: .L9$pb: 618; LARGE-SMALL-DATA-PIC-NEXT: leaq .L9$pb(%rip), %rax 619; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L9$pb, %rcx 620; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 621; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_data@GOTOFF, %rax 622; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax 623; LARGE-SMALL-DATA-PIC-NEXT: retq 624 %rv = load i32, ptr getelementptr inbounds ([10 x i32], ptr @global_data, i64 0, i64 2) 625 ret i32 %rv 626} 627 628define dso_local i32 @load_extern_data() #0 { 629; SMALL-STATIC-LABEL: load_extern_data: 630; SMALL-STATIC: # %bb.0: 631; SMALL-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 632; SMALL-STATIC-NEXT: movl 8(%rax), %eax 633; SMALL-STATIC-NEXT: retq 634; 635; MEDIUM-STATIC-LABEL: load_extern_data: 636; MEDIUM-STATIC: # %bb.0: 637; MEDIUM-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 638; MEDIUM-STATIC-NEXT: movl 8(%rax), %eax 639; MEDIUM-STATIC-NEXT: retq 640; 641; LARGE-STATIC-LABEL: load_extern_data: 642; LARGE-STATIC: # %bb.0: 643; LARGE-STATIC-NEXT: movabsq $extern_data, %rax 644; LARGE-STATIC-NEXT: movl 8(%rax), %eax 645; LARGE-STATIC-NEXT: retq 646; 647; SMALL-PIC-LABEL: load_extern_data: 648; SMALL-PIC: # %bb.0: 649; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 650; SMALL-PIC-NEXT: movl 8(%rax), %eax 651; SMALL-PIC-NEXT: retq 652; 653; MEDIUM-SMALL-DATA-PIC-LABEL: load_extern_data: 654; MEDIUM-SMALL-DATA-PIC: # %bb.0: 655; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 656; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax), %eax 657; MEDIUM-SMALL-DATA-PIC-NEXT: retq 658; 659; MEDIUM-PIC-LABEL: load_extern_data: 660; MEDIUM-PIC: # %bb.0: 661; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax 662; MEDIUM-PIC-NEXT: movl 8(%rax), %eax 663; MEDIUM-PIC-NEXT: retq 664; 665; LARGE-PIC-LABEL: load_extern_data: 666; LARGE-PIC: # %bb.0: 667; LARGE-PIC-NEXT: .L10$pb: 668; LARGE-PIC-NEXT: leaq .L10$pb(%rip), %rax 669; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10$pb, %rcx 670; LARGE-PIC-NEXT: addq %rax, %rcx 671; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax 672; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax 673; LARGE-PIC-NEXT: movl 8(%rax), %eax 674; LARGE-PIC-NEXT: retq 675; 676; LARGE-SMALL-DATA-PIC-LABEL: load_extern_data: 677; LARGE-SMALL-DATA-PIC: # %bb.0: 678; LARGE-SMALL-DATA-PIC-NEXT: .L10$pb: 679; LARGE-SMALL-DATA-PIC-NEXT: leaq .L10$pb(%rip), %rax 680; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10$pb, %rcx 681; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 682; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_data@GOT, %rax 683; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax 684; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rax), %eax 685; LARGE-SMALL-DATA-PIC-NEXT: retq 686 %rv = load i32, ptr getelementptr inbounds ([10 x i32], ptr @extern_data, i64 0, i64 2) 687 ret i32 %rv 688} 689 690define dso_local i32 @load_unknown_size_data() #0 { 691; SMALL-STATIC-LABEL: load_unknown_size_data: 692; SMALL-STATIC: # %bb.0: 693; SMALL-STATIC-NEXT: movl unknown_size_data+8(%rip), %eax 694; SMALL-STATIC-NEXT: retq 695; 696; MEDIUM-STATIC-LABEL: load_unknown_size_data: 697; MEDIUM-STATIC: # %bb.0: 698; MEDIUM-STATIC-NEXT: movabsq $unknown_size_data+8, %rax 699; MEDIUM-STATIC-NEXT: movl (%rax), %eax 700; MEDIUM-STATIC-NEXT: retq 701; 702; LARGE-STATIC-LABEL: load_unknown_size_data: 703; LARGE-STATIC: # %bb.0: 704; LARGE-STATIC-NEXT: movabsq $unknown_size_data+8, %rax 705; LARGE-STATIC-NEXT: movl (%rax), %eax 706; LARGE-STATIC-NEXT: retq 707; 708; SMALL-PIC-LABEL: load_unknown_size_data: 709; SMALL-PIC: # %bb.0: 710; SMALL-PIC-NEXT: movl unknown_size_data+8(%rip), %eax 711; SMALL-PIC-NEXT: retq 712; 713; MEDIUM-SMALL-DATA-PIC-LABEL: load_unknown_size_data: 714; MEDIUM-SMALL-DATA-PIC: # %bb.0: 715; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 716; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rcx 717; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax,%rcx), %eax 718; MEDIUM-SMALL-DATA-PIC-NEXT: retq 719; 720; MEDIUM-PIC-LABEL: load_unknown_size_data: 721; MEDIUM-PIC: # %bb.0: 722; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 723; MEDIUM-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rcx 724; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax 725; MEDIUM-PIC-NEXT: retq 726; 727; LARGE-PIC-LABEL: load_unknown_size_data: 728; LARGE-PIC: # %bb.0: 729; LARGE-PIC-NEXT: .L11$pb: 730; LARGE-PIC-NEXT: leaq .L11$pb(%rip), %rax 731; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11$pb, %rcx 732; LARGE-PIC-NEXT: addq %rax, %rcx 733; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 734; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax 735; LARGE-PIC-NEXT: retq 736; 737; LARGE-SMALL-DATA-PIC-LABEL: load_unknown_size_data: 738; LARGE-SMALL-DATA-PIC: # %bb.0: 739; LARGE-SMALL-DATA-PIC-NEXT: .L11$pb: 740; LARGE-SMALL-DATA-PIC-NEXT: leaq .L11$pb(%rip), %rax 741; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11$pb, %rcx 742; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 743; LARGE-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax 744; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax 745; LARGE-SMALL-DATA-PIC-NEXT: retq 746 %rv = load i32, ptr getelementptr inbounds (i32, ptr @unknown_size_data, i64 2) 747 ret i32 %rv 748} 749 750define dso_local i1 @load_bool() #0 { 751; SMALL-STATIC-LABEL: load_bool: 752; SMALL-STATIC: # %bb.0: 753; SMALL-STATIC-NEXT: movzbl bool(%rip), %eax 754; SMALL-STATIC-NEXT: retq 755; 756; MEDIUM-STATIC-LABEL: load_bool: 757; MEDIUM-STATIC: # %bb.0: 758; MEDIUM-STATIC-NEXT: movabsq $bool, %rax 759; MEDIUM-STATIC-NEXT: movzbl (%rax), %eax 760; MEDIUM-STATIC-NEXT: retq 761; 762; LARGE-STATIC-LABEL: load_bool: 763; LARGE-STATIC: # %bb.0: 764; LARGE-STATIC-NEXT: movabsq $bool, %rax 765; LARGE-STATIC-NEXT: movzbl (%rax), %eax 766; LARGE-STATIC-NEXT: retq 767; 768; SMALL-PIC-LABEL: load_bool: 769; SMALL-PIC: # %bb.0: 770; SMALL-PIC-NEXT: movzbl bool(%rip), %eax 771; SMALL-PIC-NEXT: retq 772; 773; MEDIUM-SMALL-DATA-PIC-LABEL: load_bool: 774; MEDIUM-SMALL-DATA-PIC: # %bb.0: 775; MEDIUM-SMALL-DATA-PIC-NEXT: movzbl bool(%rip), %eax 776; MEDIUM-SMALL-DATA-PIC-NEXT: retq 777; 778; MEDIUM-PIC-LABEL: load_bool: 779; MEDIUM-PIC: # %bb.0: 780; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax 781; MEDIUM-PIC-NEXT: movabsq $bool@GOTOFF, %rcx 782; MEDIUM-PIC-NEXT: movzbl (%rax,%rcx), %eax 783; MEDIUM-PIC-NEXT: retq 784; 785; LARGE-PIC-LABEL: load_bool: 786; LARGE-PIC: # %bb.0: 787; LARGE-PIC-NEXT: .L12$pb: 788; LARGE-PIC-NEXT: leaq .L12$pb(%rip), %rax 789; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L12$pb, %rcx 790; LARGE-PIC-NEXT: addq %rax, %rcx 791; LARGE-PIC-NEXT: movabsq $bool@GOTOFF, %rax 792; LARGE-PIC-NEXT: movzbl (%rcx,%rax), %eax 793; LARGE-PIC-NEXT: retq 794; 795; LARGE-SMALL-DATA-PIC-LABEL: load_bool: 796; LARGE-SMALL-DATA-PIC: # %bb.0: 797; LARGE-SMALL-DATA-PIC-NEXT: .L12$pb: 798; LARGE-SMALL-DATA-PIC-NEXT: leaq .L12$pb(%rip), %rax 799; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L12$pb, %rcx 800; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 801; LARGE-SMALL-DATA-PIC-NEXT: movabsq $bool@GOTOFF, %rax 802; LARGE-SMALL-DATA-PIC-NEXT: movzbl (%rcx,%rax), %eax 803; LARGE-SMALL-DATA-PIC-NEXT: retq 804 %rv = load i1, ptr @bool 805 ret i1 %rv 806} 807 808define dso_local ptr @lea_opaque() #0 { 809; SMALL-STATIC-LABEL: lea_opaque: 810; SMALL-STATIC: # %bb.0: 811; SMALL-STATIC-NEXT: movl $opaque, %eax 812; SMALL-STATIC-NEXT: retq 813; 814; MEDIUM-STATIC-LABEL: lea_opaque: 815; MEDIUM-STATIC: # %bb.0: 816; MEDIUM-STATIC-NEXT: movabsq $opaque, %rax 817; MEDIUM-STATIC-NEXT: retq 818; 819; LARGE-STATIC-LABEL: lea_opaque: 820; LARGE-STATIC: # %bb.0: 821; LARGE-STATIC-NEXT: movabsq $opaque, %rax 822; LARGE-STATIC-NEXT: retq 823; 824; SMALL-PIC-LABEL: lea_opaque: 825; SMALL-PIC: # %bb.0: 826; SMALL-PIC-NEXT: leaq opaque(%rip), %rax 827; SMALL-PIC-NEXT: retq 828; 829; MEDIUM-SMALL-DATA-PIC-LABEL: lea_opaque: 830; MEDIUM-SMALL-DATA-PIC: # %bb.0: 831; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 832; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $opaque@GOTOFF, %rax 833; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 834; MEDIUM-SMALL-DATA-PIC-NEXT: retq 835; 836; MEDIUM-PIC-LABEL: lea_opaque: 837; MEDIUM-PIC: # %bb.0: 838; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 839; MEDIUM-PIC-NEXT: movabsq $opaque@GOTOFF, %rax 840; MEDIUM-PIC-NEXT: addq %rcx, %rax 841; MEDIUM-PIC-NEXT: retq 842; 843; LARGE-PIC-LABEL: lea_opaque: 844; LARGE-PIC: # %bb.0: 845; LARGE-PIC-NEXT: .L13$pb: 846; LARGE-PIC-NEXT: leaq .L13$pb(%rip), %rax 847; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L13$pb, %rcx 848; LARGE-PIC-NEXT: addq %rax, %rcx 849; LARGE-PIC-NEXT: movabsq $opaque@GOTOFF, %rax 850; LARGE-PIC-NEXT: addq %rcx, %rax 851; LARGE-PIC-NEXT: retq 852; 853; LARGE-SMALL-DATA-PIC-LABEL: lea_opaque: 854; LARGE-SMALL-DATA-PIC: # %bb.0: 855; LARGE-SMALL-DATA-PIC-NEXT: .L13$pb: 856; LARGE-SMALL-DATA-PIC-NEXT: leaq .L13$pb(%rip), %rax 857; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L13$pb, %rcx 858; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 859; LARGE-SMALL-DATA-PIC-NEXT: movabsq $opaque@GOTOFF, %rax 860; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 861; LARGE-SMALL-DATA-PIC-NEXT: retq 862 ret ptr @opaque 863} 864 865define dso_local ptr @lea_ehdr_start() #0 { 866; SMALL-STATIC-LABEL: lea_ehdr_start: 867; SMALL-STATIC: # %bb.0: 868; SMALL-STATIC-NEXT: movl $__ehdr_start, %eax 869; SMALL-STATIC-NEXT: retq 870; 871; MEDIUM-STATIC-LABEL: lea_ehdr_start: 872; MEDIUM-STATIC: # %bb.0: 873; MEDIUM-STATIC-NEXT: movabsq $__ehdr_start, %rax 874; MEDIUM-STATIC-NEXT: retq 875; 876; LARGE-STATIC-LABEL: lea_ehdr_start: 877; LARGE-STATIC: # %bb.0: 878; LARGE-STATIC-NEXT: movabsq $__ehdr_start, %rax 879; LARGE-STATIC-NEXT: retq 880; 881; SMALL-PIC-LABEL: lea_ehdr_start: 882; SMALL-PIC: # %bb.0: 883; SMALL-PIC-NEXT: leaq __ehdr_start(%rip), %rax 884; SMALL-PIC-NEXT: retq 885; 886; MEDIUM-SMALL-DATA-PIC-LABEL: lea_ehdr_start: 887; MEDIUM-SMALL-DATA-PIC: # %bb.0: 888; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 889; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax 890; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 891; MEDIUM-SMALL-DATA-PIC-NEXT: retq 892; 893; MEDIUM-PIC-LABEL: lea_ehdr_start: 894; MEDIUM-PIC: # %bb.0: 895; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 896; MEDIUM-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax 897; MEDIUM-PIC-NEXT: addq %rcx, %rax 898; MEDIUM-PIC-NEXT: retq 899; 900; LARGE-PIC-LABEL: lea_ehdr_start: 901; LARGE-PIC: # %bb.0: 902; LARGE-PIC-NEXT: .L14$pb: 903; LARGE-PIC-NEXT: leaq .L14$pb(%rip), %rax 904; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx 905; LARGE-PIC-NEXT: addq %rax, %rcx 906; LARGE-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax 907; LARGE-PIC-NEXT: addq %rcx, %rax 908; LARGE-PIC-NEXT: retq 909; 910; LARGE-SMALL-DATA-PIC-LABEL: lea_ehdr_start: 911; LARGE-SMALL-DATA-PIC: # %bb.0: 912; LARGE-SMALL-DATA-PIC-NEXT: .L14$pb: 913; LARGE-SMALL-DATA-PIC-NEXT: leaq .L14$pb(%rip), %rax 914; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx 915; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 916; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax 917; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 918; LARGE-SMALL-DATA-PIC-NEXT: retq 919 ret ptr @__ehdr_start 920} 921 922define dso_local ptr @lea_start_foo() #0 { 923; SMALL-STATIC-LABEL: lea_start_foo: 924; SMALL-STATIC: # %bb.0: 925; SMALL-STATIC-NEXT: movl $__start_foo, %eax 926; SMALL-STATIC-NEXT: retq 927; 928; MEDIUM-STATIC-LABEL: lea_start_foo: 929; MEDIUM-STATIC: # %bb.0: 930; MEDIUM-STATIC-NEXT: movabsq $__start_foo, %rax 931; MEDIUM-STATIC-NEXT: retq 932; 933; LARGE-STATIC-LABEL: lea_start_foo: 934; LARGE-STATIC: # %bb.0: 935; LARGE-STATIC-NEXT: movabsq $__start_foo, %rax 936; LARGE-STATIC-NEXT: retq 937; 938; SMALL-PIC-LABEL: lea_start_foo: 939; SMALL-PIC: # %bb.0: 940; SMALL-PIC-NEXT: leaq __start_foo(%rip), %rax 941; SMALL-PIC-NEXT: retq 942; 943; MEDIUM-SMALL-DATA-PIC-LABEL: lea_start_foo: 944; MEDIUM-SMALL-DATA-PIC: # %bb.0: 945; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 946; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax 947; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 948; MEDIUM-SMALL-DATA-PIC-NEXT: retq 949; 950; MEDIUM-PIC-LABEL: lea_start_foo: 951; MEDIUM-PIC: # %bb.0: 952; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 953; MEDIUM-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax 954; MEDIUM-PIC-NEXT: addq %rcx, %rax 955; MEDIUM-PIC-NEXT: retq 956; 957; LARGE-PIC-LABEL: lea_start_foo: 958; LARGE-PIC: # %bb.0: 959; LARGE-PIC-NEXT: .L15$pb: 960; LARGE-PIC-NEXT: leaq .L15$pb(%rip), %rax 961; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx 962; LARGE-PIC-NEXT: addq %rax, %rcx 963; LARGE-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax 964; LARGE-PIC-NEXT: addq %rcx, %rax 965; LARGE-PIC-NEXT: retq 966; 967; LARGE-SMALL-DATA-PIC-LABEL: lea_start_foo: 968; LARGE-SMALL-DATA-PIC: # %bb.0: 969; LARGE-SMALL-DATA-PIC-NEXT: .L15$pb: 970; LARGE-SMALL-DATA-PIC-NEXT: leaq .L15$pb(%rip), %rax 971; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx 972; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 973; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax 974; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 975; LARGE-SMALL-DATA-PIC-NEXT: retq 976 ret ptr @__start_foo 977} 978 979define dso_local ptr @lea_stop_foo() #0 { 980; SMALL-STATIC-LABEL: lea_stop_foo: 981; SMALL-STATIC: # %bb.0: 982; SMALL-STATIC-NEXT: movl $__stop_foo, %eax 983; SMALL-STATIC-NEXT: retq 984; 985; MEDIUM-STATIC-LABEL: lea_stop_foo: 986; MEDIUM-STATIC: # %bb.0: 987; MEDIUM-STATIC-NEXT: movabsq $__stop_foo, %rax 988; MEDIUM-STATIC-NEXT: retq 989; 990; LARGE-STATIC-LABEL: lea_stop_foo: 991; LARGE-STATIC: # %bb.0: 992; LARGE-STATIC-NEXT: movabsq $__stop_foo, %rax 993; LARGE-STATIC-NEXT: retq 994; 995; SMALL-PIC-LABEL: lea_stop_foo: 996; SMALL-PIC: # %bb.0: 997; SMALL-PIC-NEXT: leaq __stop_foo(%rip), %rax 998; SMALL-PIC-NEXT: retq 999; 1000; MEDIUM-SMALL-DATA-PIC-LABEL: lea_stop_foo: 1001; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1002; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 1003; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax 1004; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 1005; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1006; 1007; MEDIUM-PIC-LABEL: lea_stop_foo: 1008; MEDIUM-PIC: # %bb.0: 1009; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx 1010; MEDIUM-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax 1011; MEDIUM-PIC-NEXT: addq %rcx, %rax 1012; MEDIUM-PIC-NEXT: retq 1013; 1014; LARGE-PIC-LABEL: lea_stop_foo: 1015; LARGE-PIC: # %bb.0: 1016; LARGE-PIC-NEXT: .L16$pb: 1017; LARGE-PIC-NEXT: leaq .L16$pb(%rip), %rax 1018; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L16$pb, %rcx 1019; LARGE-PIC-NEXT: addq %rax, %rcx 1020; LARGE-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax 1021; LARGE-PIC-NEXT: addq %rcx, %rax 1022; LARGE-PIC-NEXT: retq 1023; 1024; LARGE-SMALL-DATA-PIC-LABEL: lea_stop_foo: 1025; LARGE-SMALL-DATA-PIC: # %bb.0: 1026; LARGE-SMALL-DATA-PIC-NEXT: .L16$pb: 1027; LARGE-SMALL-DATA-PIC-NEXT: leaq .L16$pb(%rip), %rax 1028; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L16$pb, %rcx 1029; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1030; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax 1031; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 1032; LARGE-SMALL-DATA-PIC-NEXT: retq 1033 ret ptr @__stop_foo 1034} 1035 1036define dso_local void @global_fn() #0 { 1037; CHECK-LABEL: global_fn: 1038; CHECK: # %bb.0: 1039; CHECK-NEXT: retq 1040 ret void 1041} 1042 1043define internal void @static_fn() #0 { 1044; CHECK-LABEL: static_fn: 1045; CHECK: # %bb.0: 1046; CHECK-NEXT: retq 1047 ret void 1048} 1049 1050declare void @extern_fn() 1051 1052@ifunc_func = ifunc void (), ptr @resolver 1053@dso_local_ifunc_func = dso_local ifunc void (), ptr @resolver 1054 1055define internal ptr @resolver() { 1056; CHECK-LABEL: resolver: 1057; CHECK: # %bb.0: # %entry 1058; CHECK-NEXT: xorl %eax, %eax 1059; CHECK-NEXT: retq 1060entry: 1061 ret ptr null 1062} 1063 1064define dso_local ptr @lea_static_fn() #0 { 1065; SMALL-STATIC-LABEL: lea_static_fn: 1066; SMALL-STATIC: # %bb.0: 1067; SMALL-STATIC-NEXT: movl $static_fn, %eax 1068; SMALL-STATIC-NEXT: retq 1069; 1070; MEDIUM-STATIC-LABEL: lea_static_fn: 1071; MEDIUM-STATIC: # %bb.0: 1072; MEDIUM-STATIC-NEXT: movl $static_fn, %eax 1073; MEDIUM-STATIC-NEXT: retq 1074; 1075; LARGE-STATIC-LABEL: lea_static_fn: 1076; LARGE-STATIC: # %bb.0: 1077; LARGE-STATIC-NEXT: movabsq $static_fn, %rax 1078; LARGE-STATIC-NEXT: retq 1079; 1080; SMALL-PIC-LABEL: lea_static_fn: 1081; SMALL-PIC: # %bb.0: 1082; SMALL-PIC-NEXT: leaq static_fn(%rip), %rax 1083; SMALL-PIC-NEXT: retq 1084; 1085; MEDIUM-SMALL-DATA-PIC-LABEL: lea_static_fn: 1086; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1087; MEDIUM-SMALL-DATA-PIC-NEXT: leaq static_fn(%rip), %rax 1088; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1089; 1090; MEDIUM-PIC-LABEL: lea_static_fn: 1091; MEDIUM-PIC: # %bb.0: 1092; MEDIUM-PIC-NEXT: leaq static_fn(%rip), %rax 1093; MEDIUM-PIC-NEXT: retq 1094; 1095; LARGE-PIC-LABEL: lea_static_fn: 1096; LARGE-PIC: # %bb.0: 1097; LARGE-PIC-NEXT: .L20$pb: 1098; LARGE-PIC-NEXT: leaq .L20$pb(%rip), %rax 1099; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20$pb, %rcx 1100; LARGE-PIC-NEXT: addq %rax, %rcx 1101; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax 1102; LARGE-PIC-NEXT: addq %rcx, %rax 1103; LARGE-PIC-NEXT: retq 1104; 1105; LARGE-SMALL-DATA-PIC-LABEL: lea_static_fn: 1106; LARGE-SMALL-DATA-PIC: # %bb.0: 1107; LARGE-SMALL-DATA-PIC-NEXT: .L20$pb: 1108; LARGE-SMALL-DATA-PIC-NEXT: leaq .L20$pb(%rip), %rax 1109; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20$pb, %rcx 1110; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1111; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax 1112; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 1113; LARGE-SMALL-DATA-PIC-NEXT: retq 1114 ret ptr @static_fn 1115} 1116 1117define dso_local ptr @lea_global_fn() #0 { 1118; SMALL-STATIC-LABEL: lea_global_fn: 1119; SMALL-STATIC: # %bb.0: 1120; SMALL-STATIC-NEXT: movl $global_fn, %eax 1121; SMALL-STATIC-NEXT: retq 1122; 1123; MEDIUM-STATIC-LABEL: lea_global_fn: 1124; MEDIUM-STATIC: # %bb.0: 1125; MEDIUM-STATIC-NEXT: movl $global_fn, %eax 1126; MEDIUM-STATIC-NEXT: retq 1127; 1128; LARGE-STATIC-LABEL: lea_global_fn: 1129; LARGE-STATIC: # %bb.0: 1130; LARGE-STATIC-NEXT: movabsq $global_fn, %rax 1131; LARGE-STATIC-NEXT: retq 1132; 1133; SMALL-PIC-LABEL: lea_global_fn: 1134; SMALL-PIC: # %bb.0: 1135; SMALL-PIC-NEXT: leaq global_fn(%rip), %rax 1136; SMALL-PIC-NEXT: retq 1137; 1138; MEDIUM-SMALL-DATA-PIC-LABEL: lea_global_fn: 1139; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1140; MEDIUM-SMALL-DATA-PIC-NEXT: leaq global_fn(%rip), %rax 1141; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1142; 1143; MEDIUM-PIC-LABEL: lea_global_fn: 1144; MEDIUM-PIC: # %bb.0: 1145; MEDIUM-PIC-NEXT: leaq global_fn(%rip), %rax 1146; MEDIUM-PIC-NEXT: retq 1147; 1148; LARGE-PIC-LABEL: lea_global_fn: 1149; LARGE-PIC: # %bb.0: 1150; LARGE-PIC-NEXT: .L21$pb: 1151; LARGE-PIC-NEXT: leaq .L21$pb(%rip), %rax 1152; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21$pb, %rcx 1153; LARGE-PIC-NEXT: addq %rax, %rcx 1154; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax 1155; LARGE-PIC-NEXT: addq %rcx, %rax 1156; LARGE-PIC-NEXT: retq 1157; 1158; LARGE-SMALL-DATA-PIC-LABEL: lea_global_fn: 1159; LARGE-SMALL-DATA-PIC: # %bb.0: 1160; LARGE-SMALL-DATA-PIC-NEXT: .L21$pb: 1161; LARGE-SMALL-DATA-PIC-NEXT: leaq .L21$pb(%rip), %rax 1162; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21$pb, %rcx 1163; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1164; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax 1165; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 1166; LARGE-SMALL-DATA-PIC-NEXT: retq 1167 ret ptr @global_fn 1168} 1169 1170define dso_local ptr @lea_extern_fn() #0 { 1171; SMALL-STATIC-LABEL: lea_extern_fn: 1172; SMALL-STATIC: # %bb.0: 1173; SMALL-STATIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax 1174; SMALL-STATIC-NEXT: retq 1175; 1176; MEDIUM-STATIC-LABEL: lea_extern_fn: 1177; MEDIUM-STATIC: # %bb.0: 1178; MEDIUM-STATIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax 1179; MEDIUM-STATIC-NEXT: retq 1180; 1181; LARGE-STATIC-LABEL: lea_extern_fn: 1182; LARGE-STATIC: # %bb.0: 1183; LARGE-STATIC-NEXT: movabsq $extern_fn, %rax 1184; LARGE-STATIC-NEXT: retq 1185; 1186; SMALL-PIC-LABEL: lea_extern_fn: 1187; SMALL-PIC: # %bb.0: 1188; SMALL-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax 1189; SMALL-PIC-NEXT: retq 1190; 1191; MEDIUM-SMALL-DATA-PIC-LABEL: lea_extern_fn: 1192; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1193; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax 1194; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1195; 1196; MEDIUM-PIC-LABEL: lea_extern_fn: 1197; MEDIUM-PIC: # %bb.0: 1198; MEDIUM-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax 1199; MEDIUM-PIC-NEXT: retq 1200; 1201; LARGE-PIC-LABEL: lea_extern_fn: 1202; LARGE-PIC: # %bb.0: 1203; LARGE-PIC-NEXT: .L22$pb: 1204; LARGE-PIC-NEXT: leaq .L22$pb(%rip), %rax 1205; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22$pb, %rcx 1206; LARGE-PIC-NEXT: addq %rax, %rcx 1207; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rax 1208; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax 1209; LARGE-PIC-NEXT: retq 1210; 1211; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_fn: 1212; LARGE-SMALL-DATA-PIC: # %bb.0: 1213; LARGE-SMALL-DATA-PIC-NEXT: .L22$pb: 1214; LARGE-SMALL-DATA-PIC-NEXT: leaq .L22$pb(%rip), %rax 1215; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22$pb, %rcx 1216; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1217; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_fn@GOT, %rax 1218; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax 1219; LARGE-SMALL-DATA-PIC-NEXT: retq 1220 ret ptr @extern_fn 1221} 1222 1223define dso_local ptr @lea_ifunc() #0 { 1224; SMALL-STATIC-LABEL: lea_ifunc: 1225; SMALL-STATIC: # %bb.0: 1226; SMALL-STATIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax 1227; SMALL-STATIC-NEXT: retq 1228; 1229; MEDIUM-STATIC-LABEL: lea_ifunc: 1230; MEDIUM-STATIC: # %bb.0: 1231; MEDIUM-STATIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax 1232; MEDIUM-STATIC-NEXT: retq 1233; 1234; LARGE-STATIC-LABEL: lea_ifunc: 1235; LARGE-STATIC: # %bb.0: 1236; LARGE-STATIC-NEXT: movabsq $ifunc_func, %rax 1237; LARGE-STATIC-NEXT: retq 1238; 1239; SMALL-PIC-LABEL: lea_ifunc: 1240; SMALL-PIC: # %bb.0: 1241; SMALL-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax 1242; SMALL-PIC-NEXT: retq 1243; 1244; MEDIUM-SMALL-DATA-PIC-LABEL: lea_ifunc: 1245; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1246; MEDIUM-SMALL-DATA-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax 1247; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1248; 1249; MEDIUM-PIC-LABEL: lea_ifunc: 1250; MEDIUM-PIC: # %bb.0: 1251; MEDIUM-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax 1252; MEDIUM-PIC-NEXT: retq 1253; 1254; LARGE-PIC-LABEL: lea_ifunc: 1255; LARGE-PIC: # %bb.0: 1256; LARGE-PIC-NEXT: .L23$pb: 1257; LARGE-PIC-NEXT: leaq .L23$pb(%rip), %rax 1258; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23$pb, %rcx 1259; LARGE-PIC-NEXT: addq %rax, %rcx 1260; LARGE-PIC-NEXT: movabsq $ifunc_func@GOT, %rax 1261; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax 1262; LARGE-PIC-NEXT: retq 1263; 1264; LARGE-SMALL-DATA-PIC-LABEL: lea_ifunc: 1265; LARGE-SMALL-DATA-PIC: # %bb.0: 1266; LARGE-SMALL-DATA-PIC-NEXT: .L23$pb: 1267; LARGE-SMALL-DATA-PIC-NEXT: leaq .L23$pb(%rip), %rax 1268; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23$pb, %rcx 1269; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1270; LARGE-SMALL-DATA-PIC-NEXT: movabsq $ifunc_func@GOT, %rax 1271; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax 1272; LARGE-SMALL-DATA-PIC-NEXT: retq 1273 ret ptr @ifunc_func 1274} 1275 1276define dso_local ptr @lea_dso_local_ifunc() #0 { 1277; SMALL-STATIC-LABEL: lea_dso_local_ifunc: 1278; SMALL-STATIC: # %bb.0: 1279; SMALL-STATIC-NEXT: movl $dso_local_ifunc_func, %eax 1280; SMALL-STATIC-NEXT: retq 1281; 1282; MEDIUM-STATIC-LABEL: lea_dso_local_ifunc: 1283; MEDIUM-STATIC: # %bb.0: 1284; MEDIUM-STATIC-NEXT: movl $dso_local_ifunc_func, %eax 1285; MEDIUM-STATIC-NEXT: retq 1286; 1287; LARGE-STATIC-LABEL: lea_dso_local_ifunc: 1288; LARGE-STATIC: # %bb.0: 1289; LARGE-STATIC-NEXT: movabsq $dso_local_ifunc_func, %rax 1290; LARGE-STATIC-NEXT: retq 1291; 1292; SMALL-PIC-LABEL: lea_dso_local_ifunc: 1293; SMALL-PIC: # %bb.0: 1294; SMALL-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax 1295; SMALL-PIC-NEXT: retq 1296; 1297; MEDIUM-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc: 1298; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1299; MEDIUM-SMALL-DATA-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax 1300; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1301; 1302; MEDIUM-PIC-LABEL: lea_dso_local_ifunc: 1303; MEDIUM-PIC: # %bb.0: 1304; MEDIUM-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax 1305; MEDIUM-PIC-NEXT: retq 1306; 1307; LARGE-PIC-LABEL: lea_dso_local_ifunc: 1308; LARGE-PIC: # %bb.0: 1309; LARGE-PIC-NEXT: .L24$pb: 1310; LARGE-PIC-NEXT: leaq .L24$pb(%rip), %rax 1311; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L24$pb, %rcx 1312; LARGE-PIC-NEXT: addq %rax, %rcx 1313; LARGE-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax 1314; LARGE-PIC-NEXT: addq %rcx, %rax 1315; LARGE-PIC-NEXT: retq 1316; 1317; LARGE-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc: 1318; LARGE-SMALL-DATA-PIC: # %bb.0: 1319; LARGE-SMALL-DATA-PIC-NEXT: .L24$pb: 1320; LARGE-SMALL-DATA-PIC-NEXT: leaq .L24$pb(%rip), %rax 1321; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L24$pb, %rcx 1322; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1323; LARGE-SMALL-DATA-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax 1324; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax 1325; LARGE-SMALL-DATA-PIC-NEXT: retq 1326 ret ptr @dso_local_ifunc_func 1327} 1328 1329; FIXME: The result is same for small, medium and large model, because we 1330; specify pie option in the test case. And the type of tls is initial exec tls. 1331; For pic code. The large model code for pic tls should be emitted as below. 1332 1333; .L3: 1334; leaq .L3(%rip), %rbx 1335; movabsq $_GLOBAL_OFFSET_TABLE_-.L3, %r11 1336; addq %r11, %rbx 1337; leaq thread_data@TLSGD(%rip), %rdi 1338; movabsq $__tls_get_addr@PLTOFF, %rax 1339; addq %rbx, %rax 1340; call *%rax 1341; movl (%rax), %eax 1342 1343; The medium and small model code for pic tls should be emitted as below. 1344; data16 1345; leaq thread_data@TLSGD(%rip), %rdi 1346; data16 1347; data16 1348; rex64 1349; callq __tls_get_addr@PLT 1350; movl (%rax), %eax 1351 1352define dso_local i32 @load_thread_data() #0 { 1353; CHECK-LABEL: load_thread_data: 1354; CHECK: # %bb.0: 1355; CHECK-NEXT: movq thread_data@GOTTPOFF(%rip), %rax 1356; CHECK-NEXT: movl %fs:(%rax), %eax 1357; CHECK-NEXT: retq 1358 %1 = load i32, ptr @thread_data, align 4 1359 ret i32 %1 1360} 1361 1362define dso_local float @load_constant_pool(float %x) #0 { 1363; SMALL-STATIC-LABEL: load_constant_pool: 1364; SMALL-STATIC: # %bb.0: 1365; SMALL-STATIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 1366; SMALL-STATIC-NEXT: retq 1367; 1368; MEDIUM-STATIC-LABEL: load_constant_pool: 1369; MEDIUM-STATIC: # %bb.0: 1370; MEDIUM-STATIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 1371; MEDIUM-STATIC-NEXT: retq 1372; 1373; LARGE-STATIC-LABEL: load_constant_pool: 1374; LARGE-STATIC: # %bb.0: 1375; LARGE-STATIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}, %rax 1376; LARGE-STATIC-NEXT: addss (%rax), %xmm0 1377; LARGE-STATIC-NEXT: retq 1378; 1379; SMALL-PIC-LABEL: load_constant_pool: 1380; SMALL-PIC: # %bb.0: 1381; SMALL-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 1382; SMALL-PIC-NEXT: retq 1383; 1384; MEDIUM-SMALL-DATA-PIC-LABEL: load_constant_pool: 1385; MEDIUM-SMALL-DATA-PIC: # %bb.0: 1386; MEDIUM-SMALL-DATA-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 1387; MEDIUM-SMALL-DATA-PIC-NEXT: retq 1388; 1389; MEDIUM-PIC-LABEL: load_constant_pool: 1390; MEDIUM-PIC: # %bb.0: 1391; MEDIUM-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 1392; MEDIUM-PIC-NEXT: retq 1393; 1394; LARGE-PIC-LABEL: load_constant_pool: 1395; LARGE-PIC: # %bb.0: 1396; LARGE-PIC-NEXT: .L26$pb: 1397; LARGE-PIC-NEXT: leaq .L26$pb(%rip), %rax 1398; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L26$pb, %rcx 1399; LARGE-PIC-NEXT: addq %rax, %rcx 1400; LARGE-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax 1401; LARGE-PIC-NEXT: addss (%rcx,%rax), %xmm0 1402; LARGE-PIC-NEXT: retq 1403; 1404; LARGE-SMALL-DATA-PIC-LABEL: load_constant_pool: 1405; LARGE-SMALL-DATA-PIC: # %bb.0: 1406; LARGE-SMALL-DATA-PIC-NEXT: .L26$pb: 1407; LARGE-SMALL-DATA-PIC-NEXT: leaq .L26$pb(%rip), %rax 1408; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L26$pb, %rcx 1409; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx 1410; LARGE-SMALL-DATA-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax 1411; LARGE-SMALL-DATA-PIC-NEXT: addss (%rcx,%rax), %xmm0 1412; LARGE-SMALL-DATA-PIC-NEXT: retq 1413 %a = fadd float %x, 1.0 1414 ret float %a 1415} 1416 1417attributes #0 = { noinline nounwind uwtable } 1418 1419!llvm.module.flags = !{!0, !1, !2} 1420!llvm.ident = !{!3} 1421 1422!0 = !{i32 1, !"wchar_size", i32 4} 1423!1 = !{i32 7, !"PIC Level", i32 2} 1424!2 = !{i32 7, !"PIE Level", i32 2} 1425!3 = !{!"clang version 7.0.0 "} 1426