1424 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp2; Run with --no_x86_scrub_rip because we care a lot about how globals are3; 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-STATIC6; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-STATIC7; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-STATIC8; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=small | FileCheck %s --check-prefix=CHECK --check-prefix=SMALL-PIC9; 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-PIC10; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-PIC11; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-PIC12; 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-PIC13 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/null16; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=medium -filetype=obj -o /dev/null17; RUN: llc -verify-machineinstrs < %s -relocation-model=static -code-model=large -filetype=obj -o /dev/null18; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=small -filetype=obj -o /dev/null19; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium -large-data-threshold=1000 -filetype=obj -o /dev/null20; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=medium -filetype=obj -o /dev/null21; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large -filetype=obj -o /dev/null22; RUN: llc -verify-machineinstrs < %s -relocation-model=pic -code-model=large -large-data-threshold=1000 -filetype=obj -o /dev/null23 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 opaque50 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 1652@static_data = internal global [10 x i32] zeroinitializer, align 1653@static_data_relro = internal constant ptr getelementptr inbounds ([10 x i32], ptr @static_data, i64 0, i64 2), align 854@extern_data = external global [10 x i32], align 1655@thread_data = external thread_local global i32, align 456@unknown_size_data = dso_local global [0 x i32] zeroinitializer, align 1657@bool = dso_local global i1 false58@opaque = external dso_local global %t59@forced_small_data = dso_local global [10 x i32] zeroinitializer, code_model "small", align 1660@forced_large_data = dso_local global [10 x i32] zeroinitializer, code_model "large", align 1661@__ehdr_start = external dso_local global i862@__start_foo = external dso_local global i863@__stop_foo = external dso_local global i864 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, %eax69; SMALL-STATIC-NEXT: retq70;71; MEDIUM-STATIC-LABEL: lea_static_data:72; MEDIUM-STATIC: # %bb.0:73; MEDIUM-STATIC-NEXT: movabsq $static_data, %rax74; MEDIUM-STATIC-NEXT: retq75;76; LARGE-STATIC-LABEL: lea_static_data:77; LARGE-STATIC: # %bb.0:78; LARGE-STATIC-NEXT: movabsq $static_data, %rax79; LARGE-STATIC-NEXT: retq80;81; SMALL-PIC-LABEL: lea_static_data:82; SMALL-PIC: # %bb.0:83; SMALL-PIC-NEXT: leaq static_data(%rip), %rax84; SMALL-PIC-NEXT: retq85;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), %rax89; MEDIUM-SMALL-DATA-PIC-NEXT: retq90;91; MEDIUM-PIC-LABEL: lea_static_data:92; MEDIUM-PIC: # %bb.0:93; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx94; MEDIUM-PIC-NEXT: movabsq $static_data@GOTOFF, %rax95; MEDIUM-PIC-NEXT: addq %rcx, %rax96; MEDIUM-PIC-NEXT: retq97;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), %rax102; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx103; LARGE-PIC-NEXT: addq %rax, %rcx104; LARGE-PIC-NEXT: movabsq $static_data@GOTOFF, %rax105; LARGE-PIC-NEXT: addq %rcx, %rax106; LARGE-PIC-NEXT: retq107;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), %rax112; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx113; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx114; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_data@GOTOFF, %rax115; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax116; LARGE-SMALL-DATA-PIC-NEXT: retq117 ret ptr @static_data118}119 120define dso_local ptr @lea_static_data_relro() #0 {121; SMALL-STATIC-LABEL: lea_static_data_relro:122; SMALL-STATIC: # %bb.0:123; SMALL-STATIC-NEXT: movl $static_data_relro, %eax124; SMALL-STATIC-NEXT: retq125;126; MEDIUM-STATIC-LABEL: lea_static_data_relro:127; MEDIUM-STATIC: # %bb.0:128; MEDIUM-STATIC-NEXT: movabsq $static_data_relro, %rax129; MEDIUM-STATIC-NEXT: retq130;131; LARGE-STATIC-LABEL: lea_static_data_relro:132; LARGE-STATIC: # %bb.0:133; LARGE-STATIC-NEXT: movabsq $static_data_relro, %rax134; LARGE-STATIC-NEXT: retq135;136; SMALL-PIC-LABEL: lea_static_data_relro:137; SMALL-PIC: # %bb.0:138; SMALL-PIC-NEXT: leaq static_data_relro(%rip), %rax139; SMALL-PIC-NEXT: retq140;141; MEDIUM-SMALL-DATA-PIC-LABEL: lea_static_data_relro:142; MEDIUM-SMALL-DATA-PIC: # %bb.0:143; MEDIUM-SMALL-DATA-PIC-NEXT: leaq static_data_relro(%rip), %rax144; MEDIUM-SMALL-DATA-PIC-NEXT: retq145;146; MEDIUM-PIC-LABEL: lea_static_data_relro:147; MEDIUM-PIC: # %bb.0:148; MEDIUM-PIC-NEXT: leaq static_data_relro(%rip), %rax149; MEDIUM-PIC-NEXT: retq150;151; LARGE-PIC-LABEL: lea_static_data_relro:152; LARGE-PIC: # %bb.0:153; LARGE-PIC-NEXT: .L1$pb:154; LARGE-PIC-NEXT: leaq .L1$pb(%rip), %rax155; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx156; LARGE-PIC-NEXT: addq %rax, %rcx157; LARGE-PIC-NEXT: movabsq $static_data_relro@GOTOFF, %rax158; LARGE-PIC-NEXT: addq %rcx, %rax159; LARGE-PIC-NEXT: retq160;161; LARGE-SMALL-DATA-PIC-LABEL: lea_static_data_relro:162; LARGE-SMALL-DATA-PIC: # %bb.0:163; LARGE-SMALL-DATA-PIC-NEXT: .L1$pb:164; LARGE-SMALL-DATA-PIC-NEXT: leaq .L1$pb(%rip), %rax165; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx166; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx167; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_data_relro@GOTOFF, %rax168; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax169; LARGE-SMALL-DATA-PIC-NEXT: retq170 ret ptr @static_data_relro171}172 173define dso_local ptr @lea_global_data() #0 {174; SMALL-STATIC-LABEL: lea_global_data:175; SMALL-STATIC: # %bb.0:176; SMALL-STATIC-NEXT: movl $global_data, %eax177; SMALL-STATIC-NEXT: retq178;179; MEDIUM-STATIC-LABEL: lea_global_data:180; MEDIUM-STATIC: # %bb.0:181; MEDIUM-STATIC-NEXT: movabsq $global_data, %rax182; MEDIUM-STATIC-NEXT: retq183;184; LARGE-STATIC-LABEL: lea_global_data:185; LARGE-STATIC: # %bb.0:186; LARGE-STATIC-NEXT: movabsq $global_data, %rax187; LARGE-STATIC-NEXT: retq188;189; SMALL-PIC-LABEL: lea_global_data:190; SMALL-PIC: # %bb.0:191; SMALL-PIC-NEXT: leaq global_data(%rip), %rax192; SMALL-PIC-NEXT: retq193;194; MEDIUM-SMALL-DATA-PIC-LABEL: lea_global_data:195; MEDIUM-SMALL-DATA-PIC: # %bb.0:196; MEDIUM-SMALL-DATA-PIC-NEXT: leaq global_data(%rip), %rax197; MEDIUM-SMALL-DATA-PIC-NEXT: retq198;199; MEDIUM-PIC-LABEL: lea_global_data:200; MEDIUM-PIC: # %bb.0:201; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx202; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rax203; MEDIUM-PIC-NEXT: addq %rcx, %rax204; MEDIUM-PIC-NEXT: retq205;206; LARGE-PIC-LABEL: lea_global_data:207; LARGE-PIC: # %bb.0:208; LARGE-PIC-NEXT: .L2$pb:209; LARGE-PIC-NEXT: leaq .L2$pb(%rip), %rax210; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2$pb, %rcx211; LARGE-PIC-NEXT: addq %rax, %rcx212; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax213; LARGE-PIC-NEXT: addq %rcx, %rax214; LARGE-PIC-NEXT: retq215;216; LARGE-SMALL-DATA-PIC-LABEL: lea_global_data:217; LARGE-SMALL-DATA-PIC: # %bb.0:218; LARGE-SMALL-DATA-PIC-NEXT: .L2$pb:219; LARGE-SMALL-DATA-PIC-NEXT: leaq .L2$pb(%rip), %rax220; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2$pb, %rcx221; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx222; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_data@GOTOFF, %rax223; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax224; LARGE-SMALL-DATA-PIC-NEXT: retq225 ret ptr @global_data226}227 228define dso_local ptr @lea_extern_data() #0 {229; SMALL-STATIC-LABEL: lea_extern_data:230; SMALL-STATIC: # %bb.0:231; SMALL-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax232; SMALL-STATIC-NEXT: retq233;234; MEDIUM-STATIC-LABEL: lea_extern_data:235; MEDIUM-STATIC: # %bb.0:236; MEDIUM-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax237; MEDIUM-STATIC-NEXT: retq238;239; LARGE-STATIC-LABEL: lea_extern_data:240; LARGE-STATIC: # %bb.0:241; LARGE-STATIC-NEXT: movabsq $extern_data, %rax242; LARGE-STATIC-NEXT: retq243;244; SMALL-PIC-LABEL: lea_extern_data:245; SMALL-PIC: # %bb.0:246; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax247; SMALL-PIC-NEXT: retq248;249; MEDIUM-SMALL-DATA-PIC-LABEL: lea_extern_data:250; MEDIUM-SMALL-DATA-PIC: # %bb.0:251; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax252; MEDIUM-SMALL-DATA-PIC-NEXT: retq253;254; MEDIUM-PIC-LABEL: lea_extern_data:255; MEDIUM-PIC: # %bb.0:256; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax257; MEDIUM-PIC-NEXT: retq258;259; LARGE-PIC-LABEL: lea_extern_data:260; LARGE-PIC: # %bb.0:261; LARGE-PIC-NEXT: .L3$pb:262; LARGE-PIC-NEXT: leaq .L3$pb(%rip), %rax263; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3$pb, %rcx264; LARGE-PIC-NEXT: addq %rax, %rcx265; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax266; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax267; LARGE-PIC-NEXT: retq268;269; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_data:270; LARGE-SMALL-DATA-PIC: # %bb.0:271; LARGE-SMALL-DATA-PIC-NEXT: .L3$pb:272; LARGE-SMALL-DATA-PIC-NEXT: leaq .L3$pb(%rip), %rax273; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3$pb, %rcx274; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx275; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_data@GOT, %rax276; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax277; LARGE-SMALL-DATA-PIC-NEXT: retq278 ret ptr @extern_data279}280 281define dso_local ptr @lea_unknown_size_data() #0 {282; SMALL-STATIC-LABEL: lea_unknown_size_data:283; SMALL-STATIC: # %bb.0:284; SMALL-STATIC-NEXT: movl $unknown_size_data, %eax285; SMALL-STATIC-NEXT: retq286;287; MEDIUM-STATIC-LABEL: lea_unknown_size_data:288; MEDIUM-STATIC: # %bb.0:289; MEDIUM-STATIC-NEXT: movabsq $unknown_size_data, %rax290; MEDIUM-STATIC-NEXT: retq291;292; LARGE-STATIC-LABEL: lea_unknown_size_data:293; LARGE-STATIC: # %bb.0:294; LARGE-STATIC-NEXT: movabsq $unknown_size_data, %rax295; LARGE-STATIC-NEXT: retq296;297; SMALL-PIC-LABEL: lea_unknown_size_data:298; SMALL-PIC: # %bb.0:299; SMALL-PIC-NEXT: leaq unknown_size_data(%rip), %rax300; SMALL-PIC-NEXT: retq301;302; MEDIUM-SMALL-DATA-PIC-LABEL: lea_unknown_size_data:303; MEDIUM-SMALL-DATA-PIC: # %bb.0:304; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx305; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax306; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax307; MEDIUM-SMALL-DATA-PIC-NEXT: retq308;309; MEDIUM-PIC-LABEL: lea_unknown_size_data:310; MEDIUM-PIC: # %bb.0:311; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx312; MEDIUM-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax313; MEDIUM-PIC-NEXT: addq %rcx, %rax314; MEDIUM-PIC-NEXT: retq315;316; LARGE-PIC-LABEL: lea_unknown_size_data:317; LARGE-PIC: # %bb.0:318; LARGE-PIC-NEXT: .L4$pb:319; LARGE-PIC-NEXT: leaq .L4$pb(%rip), %rax320; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4$pb, %rcx321; LARGE-PIC-NEXT: addq %rax, %rcx322; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax323; LARGE-PIC-NEXT: addq %rcx, %rax324; LARGE-PIC-NEXT: retq325;326; LARGE-SMALL-DATA-PIC-LABEL: lea_unknown_size_data:327; LARGE-SMALL-DATA-PIC: # %bb.0:328; LARGE-SMALL-DATA-PIC-NEXT: .L4$pb:329; LARGE-SMALL-DATA-PIC-NEXT: leaq .L4$pb(%rip), %rax330; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4$pb, %rcx331; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx332; LARGE-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax333; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax334; LARGE-SMALL-DATA-PIC-NEXT: retq335 ret ptr @unknown_size_data336}337 338define dso_local ptr @lea_forced_small_data() #0 {339; SMALL-STATIC-LABEL: lea_forced_small_data:340; SMALL-STATIC: # %bb.0:341; SMALL-STATIC-NEXT: movl $forced_small_data, %eax342; SMALL-STATIC-NEXT: retq343;344; MEDIUM-STATIC-LABEL: lea_forced_small_data:345; MEDIUM-STATIC: # %bb.0:346; MEDIUM-STATIC-NEXT: movl $forced_small_data, %eax347; MEDIUM-STATIC-NEXT: retq348;349; LARGE-STATIC-LABEL: lea_forced_small_data:350; LARGE-STATIC: # %bb.0:351; LARGE-STATIC-NEXT: movabsq $forced_small_data, %rax352; LARGE-STATIC-NEXT: retq353;354; SMALL-PIC-LABEL: lea_forced_small_data:355; SMALL-PIC: # %bb.0:356; SMALL-PIC-NEXT: leaq forced_small_data(%rip), %rax357; SMALL-PIC-NEXT: retq358;359; MEDIUM-SMALL-DATA-PIC-LABEL: lea_forced_small_data:360; MEDIUM-SMALL-DATA-PIC: # %bb.0:361; MEDIUM-SMALL-DATA-PIC-NEXT: leaq forced_small_data(%rip), %rax362; MEDIUM-SMALL-DATA-PIC-NEXT: retq363;364; MEDIUM-PIC-LABEL: lea_forced_small_data:365; MEDIUM-PIC: # %bb.0:366; MEDIUM-PIC-NEXT: leaq forced_small_data(%rip), %rax367; MEDIUM-PIC-NEXT: retq368;369; LARGE-PIC-LABEL: lea_forced_small_data:370; LARGE-PIC: # %bb.0:371; LARGE-PIC-NEXT: .L5$pb:372; LARGE-PIC-NEXT: leaq .L5$pb(%rip), %rax373; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5$pb, %rcx374; LARGE-PIC-NEXT: addq %rax, %rcx375; LARGE-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax376; LARGE-PIC-NEXT: addq %rcx, %rax377; LARGE-PIC-NEXT: retq378;379; LARGE-SMALL-DATA-PIC-LABEL: lea_forced_small_data:380; LARGE-SMALL-DATA-PIC: # %bb.0:381; LARGE-SMALL-DATA-PIC-NEXT: .L5$pb:382; LARGE-SMALL-DATA-PIC-NEXT: leaq .L5$pb(%rip), %rax383; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5$pb, %rcx384; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx385; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax386; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax387; LARGE-SMALL-DATA-PIC-NEXT: retq388 ret ptr @forced_small_data389}390 391define dso_local i32 @load_forced_small_data() #0 {392; SMALL-STATIC-LABEL: load_forced_small_data:393; SMALL-STATIC: # %bb.0:394; SMALL-STATIC-NEXT: movl forced_small_data+8(%rip), %eax395; SMALL-STATIC-NEXT: retq396;397; MEDIUM-STATIC-LABEL: load_forced_small_data:398; MEDIUM-STATIC: # %bb.0:399; MEDIUM-STATIC-NEXT: movl forced_small_data+8(%rip), %eax400; MEDIUM-STATIC-NEXT: retq401;402; LARGE-STATIC-LABEL: load_forced_small_data:403; LARGE-STATIC: # %bb.0:404; LARGE-STATIC-NEXT: movabsq $forced_small_data+8, %rax405; LARGE-STATIC-NEXT: movl (%rax), %eax406; LARGE-STATIC-NEXT: retq407;408; SMALL-PIC-LABEL: load_forced_small_data:409; SMALL-PIC: # %bb.0:410; SMALL-PIC-NEXT: movl forced_small_data+8(%rip), %eax411; SMALL-PIC-NEXT: retq412;413; MEDIUM-SMALL-DATA-PIC-LABEL: load_forced_small_data:414; MEDIUM-SMALL-DATA-PIC: # %bb.0:415; MEDIUM-SMALL-DATA-PIC-NEXT: movl forced_small_data+8(%rip), %eax416; MEDIUM-SMALL-DATA-PIC-NEXT: retq417;418; MEDIUM-PIC-LABEL: load_forced_small_data:419; MEDIUM-PIC: # %bb.0:420; MEDIUM-PIC-NEXT: movl forced_small_data+8(%rip), %eax421; MEDIUM-PIC-NEXT: retq422;423; LARGE-PIC-LABEL: load_forced_small_data:424; LARGE-PIC: # %bb.0:425; LARGE-PIC-NEXT: .L6$pb:426; LARGE-PIC-NEXT: leaq .L6$pb(%rip), %rax427; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6$pb, %rcx428; LARGE-PIC-NEXT: addq %rax, %rcx429; LARGE-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax430; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax431; LARGE-PIC-NEXT: retq432;433; LARGE-SMALL-DATA-PIC-LABEL: load_forced_small_data:434; LARGE-SMALL-DATA-PIC: # %bb.0:435; LARGE-SMALL-DATA-PIC-NEXT: .L6$pb:436; LARGE-SMALL-DATA-PIC-NEXT: leaq .L6$pb(%rip), %rax437; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6$pb, %rcx438; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx439; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_small_data@GOTOFF, %rax440; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax441; LARGE-SMALL-DATA-PIC-NEXT: retq442 %rv = load i32, ptr getelementptr inbounds (i32, ptr @forced_small_data, i64 2)443 ret i32 %rv444}445 446define dso_local ptr @lea_forced_large_data() #0 {447; SMALL-STATIC-LABEL: lea_forced_large_data:448; SMALL-STATIC: # %bb.0:449; SMALL-STATIC-NEXT: movabsq $forced_large_data, %rax450; SMALL-STATIC-NEXT: retq451;452; MEDIUM-STATIC-LABEL: lea_forced_large_data:453; MEDIUM-STATIC: # %bb.0:454; MEDIUM-STATIC-NEXT: movabsq $forced_large_data, %rax455; MEDIUM-STATIC-NEXT: retq456;457; LARGE-STATIC-LABEL: lea_forced_large_data:458; LARGE-STATIC: # %bb.0:459; LARGE-STATIC-NEXT: movabsq $forced_large_data, %rax460; LARGE-STATIC-NEXT: retq461;462; SMALL-PIC-LABEL: lea_forced_large_data:463; SMALL-PIC: # %bb.0:464; SMALL-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx465; SMALL-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax466; SMALL-PIC-NEXT: addq %rcx, %rax467; SMALL-PIC-NEXT: retq468;469; MEDIUM-SMALL-DATA-PIC-LABEL: lea_forced_large_data:470; MEDIUM-SMALL-DATA-PIC: # %bb.0:471; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx472; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax473; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax474; MEDIUM-SMALL-DATA-PIC-NEXT: retq475;476; MEDIUM-PIC-LABEL: lea_forced_large_data:477; MEDIUM-PIC: # %bb.0:478; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx479; MEDIUM-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax480; MEDIUM-PIC-NEXT: addq %rcx, %rax481; MEDIUM-PIC-NEXT: retq482;483; LARGE-PIC-LABEL: lea_forced_large_data:484; LARGE-PIC: # %bb.0:485; LARGE-PIC-NEXT: .L7$pb:486; LARGE-PIC-NEXT: leaq .L7$pb(%rip), %rax487; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L7$pb, %rcx488; LARGE-PIC-NEXT: addq %rax, %rcx489; LARGE-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax490; LARGE-PIC-NEXT: addq %rcx, %rax491; LARGE-PIC-NEXT: retq492;493; LARGE-SMALL-DATA-PIC-LABEL: lea_forced_large_data:494; LARGE-SMALL-DATA-PIC: # %bb.0:495; LARGE-SMALL-DATA-PIC-NEXT: .L7$pb:496; LARGE-SMALL-DATA-PIC-NEXT: leaq .L7$pb(%rip), %rax497; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L7$pb, %rcx498; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx499; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax500; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax501; LARGE-SMALL-DATA-PIC-NEXT: retq502 ret ptr @forced_large_data503}504 505define dso_local i32 @load_forced_large_data() #0 {506; SMALL-STATIC-LABEL: load_forced_large_data:507; SMALL-STATIC: # %bb.0:508; SMALL-STATIC-NEXT: movabsq $forced_large_data+8, %rax509; SMALL-STATIC-NEXT: movl (%rax), %eax510; SMALL-STATIC-NEXT: retq511;512; MEDIUM-STATIC-LABEL: load_forced_large_data:513; MEDIUM-STATIC: # %bb.0:514; MEDIUM-STATIC-NEXT: movabsq $forced_large_data+8, %rax515; MEDIUM-STATIC-NEXT: movl (%rax), %eax516; MEDIUM-STATIC-NEXT: retq517;518; LARGE-STATIC-LABEL: load_forced_large_data:519; LARGE-STATIC: # %bb.0:520; LARGE-STATIC-NEXT: movabsq $forced_large_data+8, %rax521; LARGE-STATIC-NEXT: movl (%rax), %eax522; LARGE-STATIC-NEXT: retq523;524; SMALL-PIC-LABEL: load_forced_large_data:525; SMALL-PIC: # %bb.0:526; SMALL-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax527; SMALL-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx528; SMALL-PIC-NEXT: movl 8(%rax,%rcx), %eax529; SMALL-PIC-NEXT: retq530;531; MEDIUM-SMALL-DATA-PIC-LABEL: load_forced_large_data:532; MEDIUM-SMALL-DATA-PIC: # %bb.0:533; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax534; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx535; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax,%rcx), %eax536; MEDIUM-SMALL-DATA-PIC-NEXT: retq537;538; MEDIUM-PIC-LABEL: load_forced_large_data:539; MEDIUM-PIC: # %bb.0:540; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax541; MEDIUM-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rcx542; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax543; MEDIUM-PIC-NEXT: retq544;545; LARGE-PIC-LABEL: load_forced_large_data:546; LARGE-PIC: # %bb.0:547; LARGE-PIC-NEXT: .L8$pb:548; LARGE-PIC-NEXT: leaq .L8$pb(%rip), %rax549; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L8$pb, %rcx550; LARGE-PIC-NEXT: addq %rax, %rcx551; LARGE-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax552; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax553; LARGE-PIC-NEXT: retq554;555; LARGE-SMALL-DATA-PIC-LABEL: load_forced_large_data:556; LARGE-SMALL-DATA-PIC: # %bb.0:557; LARGE-SMALL-DATA-PIC-NEXT: .L8$pb:558; LARGE-SMALL-DATA-PIC-NEXT: leaq .L8$pb(%rip), %rax559; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L8$pb, %rcx560; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx561; LARGE-SMALL-DATA-PIC-NEXT: movabsq $forced_large_data@GOTOFF, %rax562; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax563; LARGE-SMALL-DATA-PIC-NEXT: retq564 %rv = load i32, ptr getelementptr inbounds (i32, ptr @forced_large_data, i64 2)565 ret i32 %rv566}567 568define dso_local i32 @load_global_data() #0 {569; SMALL-STATIC-LABEL: load_global_data:570; SMALL-STATIC: # %bb.0:571; SMALL-STATIC-NEXT: movl global_data+8(%rip), %eax572; SMALL-STATIC-NEXT: retq573;574; MEDIUM-STATIC-LABEL: load_global_data:575; MEDIUM-STATIC: # %bb.0:576; MEDIUM-STATIC-NEXT: movabsq $global_data+8, %rax577; MEDIUM-STATIC-NEXT: movl (%rax), %eax578; MEDIUM-STATIC-NEXT: retq579;580; LARGE-STATIC-LABEL: load_global_data:581; LARGE-STATIC: # %bb.0:582; LARGE-STATIC-NEXT: movabsq $global_data+8, %rax583; LARGE-STATIC-NEXT: movl (%rax), %eax584; LARGE-STATIC-NEXT: retq585;586; SMALL-PIC-LABEL: load_global_data:587; SMALL-PIC: # %bb.0:588; SMALL-PIC-NEXT: movl global_data+8(%rip), %eax589; SMALL-PIC-NEXT: retq590;591; MEDIUM-SMALL-DATA-PIC-LABEL: load_global_data:592; MEDIUM-SMALL-DATA-PIC: # %bb.0:593; MEDIUM-SMALL-DATA-PIC-NEXT: movl global_data+8(%rip), %eax594; MEDIUM-SMALL-DATA-PIC-NEXT: retq595;596; MEDIUM-PIC-LABEL: load_global_data:597; MEDIUM-PIC: # %bb.0:598; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax599; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rcx600; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax601; MEDIUM-PIC-NEXT: retq602;603; LARGE-PIC-LABEL: load_global_data:604; LARGE-PIC: # %bb.0:605; LARGE-PIC-NEXT: .L9$pb:606; LARGE-PIC-NEXT: leaq .L9$pb(%rip), %rax607; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L9$pb, %rcx608; LARGE-PIC-NEXT: addq %rax, %rcx609; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax610; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax611; LARGE-PIC-NEXT: retq612;613; LARGE-SMALL-DATA-PIC-LABEL: load_global_data:614; LARGE-SMALL-DATA-PIC: # %bb.0:615; LARGE-SMALL-DATA-PIC-NEXT: .L9$pb:616; LARGE-SMALL-DATA-PIC-NEXT: leaq .L9$pb(%rip), %rax617; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L9$pb, %rcx618; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx619; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_data@GOTOFF, %rax620; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax621; LARGE-SMALL-DATA-PIC-NEXT: retq622 %rv = load i32, ptr getelementptr inbounds ([10 x i32], ptr @global_data, i64 0, i64 2)623 ret i32 %rv624}625 626define dso_local i32 @load_extern_data() #0 {627; SMALL-STATIC-LABEL: load_extern_data:628; SMALL-STATIC: # %bb.0:629; SMALL-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax630; SMALL-STATIC-NEXT: movl 8(%rax), %eax631; SMALL-STATIC-NEXT: retq632;633; MEDIUM-STATIC-LABEL: load_extern_data:634; MEDIUM-STATIC: # %bb.0:635; MEDIUM-STATIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax636; MEDIUM-STATIC-NEXT: movl 8(%rax), %eax637; MEDIUM-STATIC-NEXT: retq638;639; LARGE-STATIC-LABEL: load_extern_data:640; LARGE-STATIC: # %bb.0:641; LARGE-STATIC-NEXT: movabsq $extern_data, %rax642; LARGE-STATIC-NEXT: movl 8(%rax), %eax643; LARGE-STATIC-NEXT: retq644;645; SMALL-PIC-LABEL: load_extern_data:646; SMALL-PIC: # %bb.0:647; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax648; SMALL-PIC-NEXT: movl 8(%rax), %eax649; SMALL-PIC-NEXT: retq650;651; MEDIUM-SMALL-DATA-PIC-LABEL: load_extern_data:652; MEDIUM-SMALL-DATA-PIC: # %bb.0:653; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax654; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax), %eax655; MEDIUM-SMALL-DATA-PIC-NEXT: retq656;657; MEDIUM-PIC-LABEL: load_extern_data:658; MEDIUM-PIC: # %bb.0:659; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax660; MEDIUM-PIC-NEXT: movl 8(%rax), %eax661; MEDIUM-PIC-NEXT: retq662;663; LARGE-PIC-LABEL: load_extern_data:664; LARGE-PIC: # %bb.0:665; LARGE-PIC-NEXT: .L10$pb:666; LARGE-PIC-NEXT: leaq .L10$pb(%rip), %rax667; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10$pb, %rcx668; LARGE-PIC-NEXT: addq %rax, %rcx669; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax670; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax671; LARGE-PIC-NEXT: movl 8(%rax), %eax672; LARGE-PIC-NEXT: retq673;674; LARGE-SMALL-DATA-PIC-LABEL: load_extern_data:675; LARGE-SMALL-DATA-PIC: # %bb.0:676; LARGE-SMALL-DATA-PIC-NEXT: .L10$pb:677; LARGE-SMALL-DATA-PIC-NEXT: leaq .L10$pb(%rip), %rax678; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10$pb, %rcx679; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx680; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_data@GOT, %rax681; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax682; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rax), %eax683; LARGE-SMALL-DATA-PIC-NEXT: retq684 %rv = load i32, ptr getelementptr inbounds ([10 x i32], ptr @extern_data, i64 0, i64 2)685 ret i32 %rv686}687 688define dso_local i32 @load_unknown_size_data() #0 {689; SMALL-STATIC-LABEL: load_unknown_size_data:690; SMALL-STATIC: # %bb.0:691; SMALL-STATIC-NEXT: movl unknown_size_data+8(%rip), %eax692; SMALL-STATIC-NEXT: retq693;694; MEDIUM-STATIC-LABEL: load_unknown_size_data:695; MEDIUM-STATIC: # %bb.0:696; MEDIUM-STATIC-NEXT: movabsq $unknown_size_data+8, %rax697; MEDIUM-STATIC-NEXT: movl (%rax), %eax698; MEDIUM-STATIC-NEXT: retq699;700; LARGE-STATIC-LABEL: load_unknown_size_data:701; LARGE-STATIC: # %bb.0:702; LARGE-STATIC-NEXT: movabsq $unknown_size_data+8, %rax703; LARGE-STATIC-NEXT: movl (%rax), %eax704; LARGE-STATIC-NEXT: retq705;706; SMALL-PIC-LABEL: load_unknown_size_data:707; SMALL-PIC: # %bb.0:708; SMALL-PIC-NEXT: movl unknown_size_data+8(%rip), %eax709; SMALL-PIC-NEXT: retq710;711; MEDIUM-SMALL-DATA-PIC-LABEL: load_unknown_size_data:712; MEDIUM-SMALL-DATA-PIC: # %bb.0:713; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax714; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rcx715; MEDIUM-SMALL-DATA-PIC-NEXT: movl 8(%rax,%rcx), %eax716; MEDIUM-SMALL-DATA-PIC-NEXT: retq717;718; MEDIUM-PIC-LABEL: load_unknown_size_data:719; MEDIUM-PIC: # %bb.0:720; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax721; MEDIUM-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rcx722; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax723; MEDIUM-PIC-NEXT: retq724;725; LARGE-PIC-LABEL: load_unknown_size_data:726; LARGE-PIC: # %bb.0:727; LARGE-PIC-NEXT: .L11$pb:728; LARGE-PIC-NEXT: leaq .L11$pb(%rip), %rax729; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11$pb, %rcx730; LARGE-PIC-NEXT: addq %rax, %rcx731; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax732; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax733; LARGE-PIC-NEXT: retq734;735; LARGE-SMALL-DATA-PIC-LABEL: load_unknown_size_data:736; LARGE-SMALL-DATA-PIC: # %bb.0:737; LARGE-SMALL-DATA-PIC-NEXT: .L11$pb:738; LARGE-SMALL-DATA-PIC-NEXT: leaq .L11$pb(%rip), %rax739; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11$pb, %rcx740; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx741; LARGE-SMALL-DATA-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax742; LARGE-SMALL-DATA-PIC-NEXT: movl 8(%rcx,%rax), %eax743; LARGE-SMALL-DATA-PIC-NEXT: retq744 %rv = load i32, ptr getelementptr inbounds (i32, ptr @unknown_size_data, i64 2)745 ret i32 %rv746}747 748define dso_local i1 @load_bool() #0 {749; SMALL-STATIC-LABEL: load_bool:750; SMALL-STATIC: # %bb.0:751; SMALL-STATIC-NEXT: movzbl bool(%rip), %eax752; SMALL-STATIC-NEXT: retq753;754; MEDIUM-STATIC-LABEL: load_bool:755; MEDIUM-STATIC: # %bb.0:756; MEDIUM-STATIC-NEXT: movabsq $bool, %rax757; MEDIUM-STATIC-NEXT: movzbl (%rax), %eax758; MEDIUM-STATIC-NEXT: retq759;760; LARGE-STATIC-LABEL: load_bool:761; LARGE-STATIC: # %bb.0:762; LARGE-STATIC-NEXT: movabsq $bool, %rax763; LARGE-STATIC-NEXT: movzbl (%rax), %eax764; LARGE-STATIC-NEXT: retq765;766; SMALL-PIC-LABEL: load_bool:767; SMALL-PIC: # %bb.0:768; SMALL-PIC-NEXT: movzbl bool(%rip), %eax769; SMALL-PIC-NEXT: retq770;771; MEDIUM-SMALL-DATA-PIC-LABEL: load_bool:772; MEDIUM-SMALL-DATA-PIC: # %bb.0:773; MEDIUM-SMALL-DATA-PIC-NEXT: movzbl bool(%rip), %eax774; MEDIUM-SMALL-DATA-PIC-NEXT: retq775;776; MEDIUM-PIC-LABEL: load_bool:777; MEDIUM-PIC: # %bb.0:778; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax779; MEDIUM-PIC-NEXT: movabsq $bool@GOTOFF, %rcx780; MEDIUM-PIC-NEXT: movzbl (%rax,%rcx), %eax781; MEDIUM-PIC-NEXT: retq782;783; LARGE-PIC-LABEL: load_bool:784; LARGE-PIC: # %bb.0:785; LARGE-PIC-NEXT: .L12$pb:786; LARGE-PIC-NEXT: leaq .L12$pb(%rip), %rax787; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L12$pb, %rcx788; LARGE-PIC-NEXT: addq %rax, %rcx789; LARGE-PIC-NEXT: movabsq $bool@GOTOFF, %rax790; LARGE-PIC-NEXT: movzbl (%rcx,%rax), %eax791; LARGE-PIC-NEXT: retq792;793; LARGE-SMALL-DATA-PIC-LABEL: load_bool:794; LARGE-SMALL-DATA-PIC: # %bb.0:795; LARGE-SMALL-DATA-PIC-NEXT: .L12$pb:796; LARGE-SMALL-DATA-PIC-NEXT: leaq .L12$pb(%rip), %rax797; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L12$pb, %rcx798; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx799; LARGE-SMALL-DATA-PIC-NEXT: movabsq $bool@GOTOFF, %rax800; LARGE-SMALL-DATA-PIC-NEXT: movzbl (%rcx,%rax), %eax801; LARGE-SMALL-DATA-PIC-NEXT: retq802 %rv = load i1, ptr @bool803 ret i1 %rv804}805 806define dso_local ptr @lea_opaque() #0 {807; SMALL-STATIC-LABEL: lea_opaque:808; SMALL-STATIC: # %bb.0:809; SMALL-STATIC-NEXT: movl $opaque, %eax810; SMALL-STATIC-NEXT: retq811;812; MEDIUM-STATIC-LABEL: lea_opaque:813; MEDIUM-STATIC: # %bb.0:814; MEDIUM-STATIC-NEXT: movabsq $opaque, %rax815; MEDIUM-STATIC-NEXT: retq816;817; LARGE-STATIC-LABEL: lea_opaque:818; LARGE-STATIC: # %bb.0:819; LARGE-STATIC-NEXT: movabsq $opaque, %rax820; LARGE-STATIC-NEXT: retq821;822; SMALL-PIC-LABEL: lea_opaque:823; SMALL-PIC: # %bb.0:824; SMALL-PIC-NEXT: leaq opaque(%rip), %rax825; SMALL-PIC-NEXT: retq826;827; MEDIUM-SMALL-DATA-PIC-LABEL: lea_opaque:828; MEDIUM-SMALL-DATA-PIC: # %bb.0:829; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx830; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $opaque@GOTOFF, %rax831; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax832; MEDIUM-SMALL-DATA-PIC-NEXT: retq833;834; MEDIUM-PIC-LABEL: lea_opaque:835; MEDIUM-PIC: # %bb.0:836; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx837; MEDIUM-PIC-NEXT: movabsq $opaque@GOTOFF, %rax838; MEDIUM-PIC-NEXT: addq %rcx, %rax839; MEDIUM-PIC-NEXT: retq840;841; LARGE-PIC-LABEL: lea_opaque:842; LARGE-PIC: # %bb.0:843; LARGE-PIC-NEXT: .L13$pb:844; LARGE-PIC-NEXT: leaq .L13$pb(%rip), %rax845; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L13$pb, %rcx846; LARGE-PIC-NEXT: addq %rax, %rcx847; LARGE-PIC-NEXT: movabsq $opaque@GOTOFF, %rax848; LARGE-PIC-NEXT: addq %rcx, %rax849; LARGE-PIC-NEXT: retq850;851; LARGE-SMALL-DATA-PIC-LABEL: lea_opaque:852; LARGE-SMALL-DATA-PIC: # %bb.0:853; LARGE-SMALL-DATA-PIC-NEXT: .L13$pb:854; LARGE-SMALL-DATA-PIC-NEXT: leaq .L13$pb(%rip), %rax855; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L13$pb, %rcx856; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx857; LARGE-SMALL-DATA-PIC-NEXT: movabsq $opaque@GOTOFF, %rax858; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax859; LARGE-SMALL-DATA-PIC-NEXT: retq860 ret ptr @opaque861}862 863define dso_local ptr @lea_ehdr_start() #0 {864; SMALL-STATIC-LABEL: lea_ehdr_start:865; SMALL-STATIC: # %bb.0:866; SMALL-STATIC-NEXT: movl $__ehdr_start, %eax867; SMALL-STATIC-NEXT: retq868;869; MEDIUM-STATIC-LABEL: lea_ehdr_start:870; MEDIUM-STATIC: # %bb.0:871; MEDIUM-STATIC-NEXT: movabsq $__ehdr_start, %rax872; MEDIUM-STATIC-NEXT: retq873;874; LARGE-STATIC-LABEL: lea_ehdr_start:875; LARGE-STATIC: # %bb.0:876; LARGE-STATIC-NEXT: movabsq $__ehdr_start, %rax877; LARGE-STATIC-NEXT: retq878;879; SMALL-PIC-LABEL: lea_ehdr_start:880; SMALL-PIC: # %bb.0:881; SMALL-PIC-NEXT: leaq __ehdr_start(%rip), %rax882; SMALL-PIC-NEXT: retq883;884; MEDIUM-SMALL-DATA-PIC-LABEL: lea_ehdr_start:885; MEDIUM-SMALL-DATA-PIC: # %bb.0:886; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx887; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax888; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax889; MEDIUM-SMALL-DATA-PIC-NEXT: retq890;891; MEDIUM-PIC-LABEL: lea_ehdr_start:892; MEDIUM-PIC: # %bb.0:893; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx894; MEDIUM-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax895; MEDIUM-PIC-NEXT: addq %rcx, %rax896; MEDIUM-PIC-NEXT: retq897;898; LARGE-PIC-LABEL: lea_ehdr_start:899; LARGE-PIC: # %bb.0:900; LARGE-PIC-NEXT: .L14$pb:901; LARGE-PIC-NEXT: leaq .L14$pb(%rip), %rax902; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx903; LARGE-PIC-NEXT: addq %rax, %rcx904; LARGE-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax905; LARGE-PIC-NEXT: addq %rcx, %rax906; LARGE-PIC-NEXT: retq907;908; LARGE-SMALL-DATA-PIC-LABEL: lea_ehdr_start:909; LARGE-SMALL-DATA-PIC: # %bb.0:910; LARGE-SMALL-DATA-PIC-NEXT: .L14$pb:911; LARGE-SMALL-DATA-PIC-NEXT: leaq .L14$pb(%rip), %rax912; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx913; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx914; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__ehdr_start@GOTOFF, %rax915; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax916; LARGE-SMALL-DATA-PIC-NEXT: retq917 ret ptr @__ehdr_start918}919 920define dso_local ptr @lea_start_foo() #0 {921; SMALL-STATIC-LABEL: lea_start_foo:922; SMALL-STATIC: # %bb.0:923; SMALL-STATIC-NEXT: movl $__start_foo, %eax924; SMALL-STATIC-NEXT: retq925;926; MEDIUM-STATIC-LABEL: lea_start_foo:927; MEDIUM-STATIC: # %bb.0:928; MEDIUM-STATIC-NEXT: movabsq $__start_foo, %rax929; MEDIUM-STATIC-NEXT: retq930;931; LARGE-STATIC-LABEL: lea_start_foo:932; LARGE-STATIC: # %bb.0:933; LARGE-STATIC-NEXT: movabsq $__start_foo, %rax934; LARGE-STATIC-NEXT: retq935;936; SMALL-PIC-LABEL: lea_start_foo:937; SMALL-PIC: # %bb.0:938; SMALL-PIC-NEXT: leaq __start_foo(%rip), %rax939; SMALL-PIC-NEXT: retq940;941; MEDIUM-SMALL-DATA-PIC-LABEL: lea_start_foo:942; MEDIUM-SMALL-DATA-PIC: # %bb.0:943; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx944; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax945; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax946; MEDIUM-SMALL-DATA-PIC-NEXT: retq947;948; MEDIUM-PIC-LABEL: lea_start_foo:949; MEDIUM-PIC: # %bb.0:950; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx951; MEDIUM-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax952; MEDIUM-PIC-NEXT: addq %rcx, %rax953; MEDIUM-PIC-NEXT: retq954;955; LARGE-PIC-LABEL: lea_start_foo:956; LARGE-PIC: # %bb.0:957; LARGE-PIC-NEXT: .L15$pb:958; LARGE-PIC-NEXT: leaq .L15$pb(%rip), %rax959; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx960; LARGE-PIC-NEXT: addq %rax, %rcx961; LARGE-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax962; LARGE-PIC-NEXT: addq %rcx, %rax963; LARGE-PIC-NEXT: retq964;965; LARGE-SMALL-DATA-PIC-LABEL: lea_start_foo:966; LARGE-SMALL-DATA-PIC: # %bb.0:967; LARGE-SMALL-DATA-PIC-NEXT: .L15$pb:968; LARGE-SMALL-DATA-PIC-NEXT: leaq .L15$pb(%rip), %rax969; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx970; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx971; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax972; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax973; LARGE-SMALL-DATA-PIC-NEXT: retq974 ret ptr @__start_foo975}976 977define dso_local ptr @lea_stop_foo() #0 {978; SMALL-STATIC-LABEL: lea_stop_foo:979; SMALL-STATIC: # %bb.0:980; SMALL-STATIC-NEXT: movl $__stop_foo, %eax981; SMALL-STATIC-NEXT: retq982;983; MEDIUM-STATIC-LABEL: lea_stop_foo:984; MEDIUM-STATIC: # %bb.0:985; MEDIUM-STATIC-NEXT: movabsq $__stop_foo, %rax986; MEDIUM-STATIC-NEXT: retq987;988; LARGE-STATIC-LABEL: lea_stop_foo:989; LARGE-STATIC: # %bb.0:990; LARGE-STATIC-NEXT: movabsq $__stop_foo, %rax991; LARGE-STATIC-NEXT: retq992;993; SMALL-PIC-LABEL: lea_stop_foo:994; SMALL-PIC: # %bb.0:995; SMALL-PIC-NEXT: leaq __stop_foo(%rip), %rax996; SMALL-PIC-NEXT: retq997;998; MEDIUM-SMALL-DATA-PIC-LABEL: lea_stop_foo:999; MEDIUM-SMALL-DATA-PIC: # %bb.0:1000; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx1001; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax1002; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax1003; MEDIUM-SMALL-DATA-PIC-NEXT: retq1004;1005; MEDIUM-PIC-LABEL: lea_stop_foo:1006; MEDIUM-PIC: # %bb.0:1007; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx1008; MEDIUM-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax1009; MEDIUM-PIC-NEXT: addq %rcx, %rax1010; MEDIUM-PIC-NEXT: retq1011;1012; LARGE-PIC-LABEL: lea_stop_foo:1013; LARGE-PIC: # %bb.0:1014; LARGE-PIC-NEXT: .L16$pb:1015; LARGE-PIC-NEXT: leaq .L16$pb(%rip), %rax1016; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L16$pb, %rcx1017; LARGE-PIC-NEXT: addq %rax, %rcx1018; LARGE-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax1019; LARGE-PIC-NEXT: addq %rcx, %rax1020; LARGE-PIC-NEXT: retq1021;1022; LARGE-SMALL-DATA-PIC-LABEL: lea_stop_foo:1023; LARGE-SMALL-DATA-PIC: # %bb.0:1024; LARGE-SMALL-DATA-PIC-NEXT: .L16$pb:1025; LARGE-SMALL-DATA-PIC-NEXT: leaq .L16$pb(%rip), %rax1026; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L16$pb, %rcx1027; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1028; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax1029; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax1030; LARGE-SMALL-DATA-PIC-NEXT: retq1031 ret ptr @__stop_foo1032}1033 1034define dso_local void @global_fn() #0 {1035; CHECK-LABEL: global_fn:1036; CHECK: # %bb.0:1037; CHECK-NEXT: retq1038 ret void1039}1040 1041define internal void @static_fn() #0 {1042; CHECK-LABEL: static_fn:1043; CHECK: # %bb.0:1044; CHECK-NEXT: retq1045 ret void1046}1047 1048declare void @extern_fn()1049 1050@ifunc_func = ifunc void (), ptr @resolver1051@dso_local_ifunc_func = dso_local ifunc void (), ptr @resolver1052 1053define internal ptr @resolver() {1054; CHECK-LABEL: resolver:1055; CHECK: # %bb.0: # %entry1056; CHECK-NEXT: xorl %eax, %eax1057; CHECK-NEXT: retq1058entry:1059 ret ptr null1060}1061 1062define dso_local ptr @lea_static_fn() #0 {1063; SMALL-STATIC-LABEL: lea_static_fn:1064; SMALL-STATIC: # %bb.0:1065; SMALL-STATIC-NEXT: movl $static_fn, %eax1066; SMALL-STATIC-NEXT: retq1067;1068; MEDIUM-STATIC-LABEL: lea_static_fn:1069; MEDIUM-STATIC: # %bb.0:1070; MEDIUM-STATIC-NEXT: movl $static_fn, %eax1071; MEDIUM-STATIC-NEXT: retq1072;1073; LARGE-STATIC-LABEL: lea_static_fn:1074; LARGE-STATIC: # %bb.0:1075; LARGE-STATIC-NEXT: movabsq $static_fn, %rax1076; LARGE-STATIC-NEXT: retq1077;1078; SMALL-PIC-LABEL: lea_static_fn:1079; SMALL-PIC: # %bb.0:1080; SMALL-PIC-NEXT: leaq static_fn(%rip), %rax1081; SMALL-PIC-NEXT: retq1082;1083; MEDIUM-SMALL-DATA-PIC-LABEL: lea_static_fn:1084; MEDIUM-SMALL-DATA-PIC: # %bb.0:1085; MEDIUM-SMALL-DATA-PIC-NEXT: leaq static_fn(%rip), %rax1086; MEDIUM-SMALL-DATA-PIC-NEXT: retq1087;1088; MEDIUM-PIC-LABEL: lea_static_fn:1089; MEDIUM-PIC: # %bb.0:1090; MEDIUM-PIC-NEXT: leaq static_fn(%rip), %rax1091; MEDIUM-PIC-NEXT: retq1092;1093; LARGE-PIC-LABEL: lea_static_fn:1094; LARGE-PIC: # %bb.0:1095; LARGE-PIC-NEXT: .L20$pb:1096; LARGE-PIC-NEXT: leaq .L20$pb(%rip), %rax1097; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20$pb, %rcx1098; LARGE-PIC-NEXT: addq %rax, %rcx1099; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax1100; LARGE-PIC-NEXT: addq %rcx, %rax1101; LARGE-PIC-NEXT: retq1102;1103; LARGE-SMALL-DATA-PIC-LABEL: lea_static_fn:1104; LARGE-SMALL-DATA-PIC: # %bb.0:1105; LARGE-SMALL-DATA-PIC-NEXT: .L20$pb:1106; LARGE-SMALL-DATA-PIC-NEXT: leaq .L20$pb(%rip), %rax1107; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20$pb, %rcx1108; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1109; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax1110; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax1111; LARGE-SMALL-DATA-PIC-NEXT: retq1112 ret ptr @static_fn1113}1114 1115define dso_local ptr @lea_global_fn() #0 {1116; SMALL-STATIC-LABEL: lea_global_fn:1117; SMALL-STATIC: # %bb.0:1118; SMALL-STATIC-NEXT: movl $global_fn, %eax1119; SMALL-STATIC-NEXT: retq1120;1121; MEDIUM-STATIC-LABEL: lea_global_fn:1122; MEDIUM-STATIC: # %bb.0:1123; MEDIUM-STATIC-NEXT: movl $global_fn, %eax1124; MEDIUM-STATIC-NEXT: retq1125;1126; LARGE-STATIC-LABEL: lea_global_fn:1127; LARGE-STATIC: # %bb.0:1128; LARGE-STATIC-NEXT: movabsq $global_fn, %rax1129; LARGE-STATIC-NEXT: retq1130;1131; SMALL-PIC-LABEL: lea_global_fn:1132; SMALL-PIC: # %bb.0:1133; SMALL-PIC-NEXT: leaq global_fn(%rip), %rax1134; SMALL-PIC-NEXT: retq1135;1136; MEDIUM-SMALL-DATA-PIC-LABEL: lea_global_fn:1137; MEDIUM-SMALL-DATA-PIC: # %bb.0:1138; MEDIUM-SMALL-DATA-PIC-NEXT: leaq global_fn(%rip), %rax1139; MEDIUM-SMALL-DATA-PIC-NEXT: retq1140;1141; MEDIUM-PIC-LABEL: lea_global_fn:1142; MEDIUM-PIC: # %bb.0:1143; MEDIUM-PIC-NEXT: leaq global_fn(%rip), %rax1144; MEDIUM-PIC-NEXT: retq1145;1146; LARGE-PIC-LABEL: lea_global_fn:1147; LARGE-PIC: # %bb.0:1148; LARGE-PIC-NEXT: .L21$pb:1149; LARGE-PIC-NEXT: leaq .L21$pb(%rip), %rax1150; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21$pb, %rcx1151; LARGE-PIC-NEXT: addq %rax, %rcx1152; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax1153; LARGE-PIC-NEXT: addq %rcx, %rax1154; LARGE-PIC-NEXT: retq1155;1156; LARGE-SMALL-DATA-PIC-LABEL: lea_global_fn:1157; LARGE-SMALL-DATA-PIC: # %bb.0:1158; LARGE-SMALL-DATA-PIC-NEXT: .L21$pb:1159; LARGE-SMALL-DATA-PIC-NEXT: leaq .L21$pb(%rip), %rax1160; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21$pb, %rcx1161; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1162; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax1163; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax1164; LARGE-SMALL-DATA-PIC-NEXT: retq1165 ret ptr @global_fn1166}1167 1168define dso_local ptr @lea_extern_fn() #0 {1169; SMALL-STATIC-LABEL: lea_extern_fn:1170; SMALL-STATIC: # %bb.0:1171; SMALL-STATIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax1172; SMALL-STATIC-NEXT: retq1173;1174; MEDIUM-STATIC-LABEL: lea_extern_fn:1175; MEDIUM-STATIC: # %bb.0:1176; MEDIUM-STATIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax1177; MEDIUM-STATIC-NEXT: retq1178;1179; LARGE-STATIC-LABEL: lea_extern_fn:1180; LARGE-STATIC: # %bb.0:1181; LARGE-STATIC-NEXT: movabsq $extern_fn, %rax1182; LARGE-STATIC-NEXT: retq1183;1184; SMALL-PIC-LABEL: lea_extern_fn:1185; SMALL-PIC: # %bb.0:1186; SMALL-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax1187; SMALL-PIC-NEXT: retq1188;1189; MEDIUM-SMALL-DATA-PIC-LABEL: lea_extern_fn:1190; MEDIUM-SMALL-DATA-PIC: # %bb.0:1191; MEDIUM-SMALL-DATA-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax1192; MEDIUM-SMALL-DATA-PIC-NEXT: retq1193;1194; MEDIUM-PIC-LABEL: lea_extern_fn:1195; MEDIUM-PIC: # %bb.0:1196; MEDIUM-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax1197; MEDIUM-PIC-NEXT: retq1198;1199; LARGE-PIC-LABEL: lea_extern_fn:1200; LARGE-PIC: # %bb.0:1201; LARGE-PIC-NEXT: .L22$pb:1202; LARGE-PIC-NEXT: leaq .L22$pb(%rip), %rax1203; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22$pb, %rcx1204; LARGE-PIC-NEXT: addq %rax, %rcx1205; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rax1206; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax1207; LARGE-PIC-NEXT: retq1208;1209; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_fn:1210; LARGE-SMALL-DATA-PIC: # %bb.0:1211; LARGE-SMALL-DATA-PIC-NEXT: .L22$pb:1212; LARGE-SMALL-DATA-PIC-NEXT: leaq .L22$pb(%rip), %rax1213; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22$pb, %rcx1214; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1215; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_fn@GOT, %rax1216; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax1217; LARGE-SMALL-DATA-PIC-NEXT: retq1218 ret ptr @extern_fn1219}1220 1221define dso_local ptr @lea_ifunc() #0 {1222; SMALL-STATIC-LABEL: lea_ifunc:1223; SMALL-STATIC: # %bb.0:1224; SMALL-STATIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax1225; SMALL-STATIC-NEXT: retq1226;1227; MEDIUM-STATIC-LABEL: lea_ifunc:1228; MEDIUM-STATIC: # %bb.0:1229; MEDIUM-STATIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax1230; MEDIUM-STATIC-NEXT: retq1231;1232; LARGE-STATIC-LABEL: lea_ifunc:1233; LARGE-STATIC: # %bb.0:1234; LARGE-STATIC-NEXT: movabsq $ifunc_func, %rax1235; LARGE-STATIC-NEXT: retq1236;1237; SMALL-PIC-LABEL: lea_ifunc:1238; SMALL-PIC: # %bb.0:1239; SMALL-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax1240; SMALL-PIC-NEXT: retq1241;1242; MEDIUM-SMALL-DATA-PIC-LABEL: lea_ifunc:1243; MEDIUM-SMALL-DATA-PIC: # %bb.0:1244; MEDIUM-SMALL-DATA-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax1245; MEDIUM-SMALL-DATA-PIC-NEXT: retq1246;1247; MEDIUM-PIC-LABEL: lea_ifunc:1248; MEDIUM-PIC: # %bb.0:1249; MEDIUM-PIC-NEXT: movq ifunc_func@GOTPCREL(%rip), %rax1250; MEDIUM-PIC-NEXT: retq1251;1252; LARGE-PIC-LABEL: lea_ifunc:1253; LARGE-PIC: # %bb.0:1254; LARGE-PIC-NEXT: .L23$pb:1255; LARGE-PIC-NEXT: leaq .L23$pb(%rip), %rax1256; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23$pb, %rcx1257; LARGE-PIC-NEXT: addq %rax, %rcx1258; LARGE-PIC-NEXT: movabsq $ifunc_func@GOT, %rax1259; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax1260; LARGE-PIC-NEXT: retq1261;1262; LARGE-SMALL-DATA-PIC-LABEL: lea_ifunc:1263; LARGE-SMALL-DATA-PIC: # %bb.0:1264; LARGE-SMALL-DATA-PIC-NEXT: .L23$pb:1265; LARGE-SMALL-DATA-PIC-NEXT: leaq .L23$pb(%rip), %rax1266; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23$pb, %rcx1267; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1268; LARGE-SMALL-DATA-PIC-NEXT: movabsq $ifunc_func@GOT, %rax1269; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax1270; LARGE-SMALL-DATA-PIC-NEXT: retq1271 ret ptr @ifunc_func1272}1273 1274define dso_local ptr @lea_dso_local_ifunc() #0 {1275; SMALL-STATIC-LABEL: lea_dso_local_ifunc:1276; SMALL-STATIC: # %bb.0:1277; SMALL-STATIC-NEXT: movl $dso_local_ifunc_func, %eax1278; SMALL-STATIC-NEXT: retq1279;1280; MEDIUM-STATIC-LABEL: lea_dso_local_ifunc:1281; MEDIUM-STATIC: # %bb.0:1282; MEDIUM-STATIC-NEXT: movl $dso_local_ifunc_func, %eax1283; MEDIUM-STATIC-NEXT: retq1284;1285; LARGE-STATIC-LABEL: lea_dso_local_ifunc:1286; LARGE-STATIC: # %bb.0:1287; LARGE-STATIC-NEXT: movabsq $dso_local_ifunc_func, %rax1288; LARGE-STATIC-NEXT: retq1289;1290; SMALL-PIC-LABEL: lea_dso_local_ifunc:1291; SMALL-PIC: # %bb.0:1292; SMALL-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax1293; SMALL-PIC-NEXT: retq1294;1295; MEDIUM-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc:1296; MEDIUM-SMALL-DATA-PIC: # %bb.0:1297; MEDIUM-SMALL-DATA-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax1298; MEDIUM-SMALL-DATA-PIC-NEXT: retq1299;1300; MEDIUM-PIC-LABEL: lea_dso_local_ifunc:1301; MEDIUM-PIC: # %bb.0:1302; MEDIUM-PIC-NEXT: leaq dso_local_ifunc_func(%rip), %rax1303; MEDIUM-PIC-NEXT: retq1304;1305; LARGE-PIC-LABEL: lea_dso_local_ifunc:1306; LARGE-PIC: # %bb.0:1307; LARGE-PIC-NEXT: .L24$pb:1308; LARGE-PIC-NEXT: leaq .L24$pb(%rip), %rax1309; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L24$pb, %rcx1310; LARGE-PIC-NEXT: addq %rax, %rcx1311; LARGE-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax1312; LARGE-PIC-NEXT: addq %rcx, %rax1313; LARGE-PIC-NEXT: retq1314;1315; LARGE-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc:1316; LARGE-SMALL-DATA-PIC: # %bb.0:1317; LARGE-SMALL-DATA-PIC-NEXT: .L24$pb:1318; LARGE-SMALL-DATA-PIC-NEXT: leaq .L24$pb(%rip), %rax1319; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L24$pb, %rcx1320; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1321; LARGE-SMALL-DATA-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax1322; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax1323; LARGE-SMALL-DATA-PIC-NEXT: retq1324 ret ptr @dso_local_ifunc_func1325}1326 1327; FIXME: The result is same for small, medium and large model, because we1328; specify pie option in the test case. And the type of tls is initial exec tls.1329; For pic code. The large model code for pic tls should be emitted as below.1330 1331; .L3:1332; leaq .L3(%rip), %rbx1333; movabsq $_GLOBAL_OFFSET_TABLE_-.L3, %r111334; addq %r11, %rbx1335; leaq thread_data@TLSGD(%rip), %rdi1336; movabsq $__tls_get_addr@PLTOFF, %rax1337; addq %rbx, %rax1338; call *%rax1339; movl (%rax), %eax1340 1341; The medium and small model code for pic tls should be emitted as below.1342; data161343; leaq thread_data@TLSGD(%rip), %rdi1344; data161345; data161346; rex641347; callq __tls_get_addr@PLT1348; movl (%rax), %eax1349 1350define dso_local i32 @load_thread_data() #0 {1351; CHECK-LABEL: load_thread_data:1352; CHECK: # %bb.0:1353; CHECK-NEXT: movq thread_data@GOTTPOFF(%rip), %rax1354; CHECK-NEXT: movl %fs:(%rax), %eax1355; CHECK-NEXT: retq1356 %1 = load i32, ptr @thread_data, align 41357 ret i32 %11358}1359 1360define dso_local float @load_constant_pool(float %x) #0 {1361; SMALL-STATIC-LABEL: load_constant_pool:1362; SMALL-STATIC: # %bb.0:1363; SMALL-STATIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01364; SMALL-STATIC-NEXT: retq1365;1366; MEDIUM-STATIC-LABEL: load_constant_pool:1367; MEDIUM-STATIC: # %bb.0:1368; MEDIUM-STATIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01369; MEDIUM-STATIC-NEXT: retq1370;1371; LARGE-STATIC-LABEL: load_constant_pool:1372; LARGE-STATIC: # %bb.0:1373; LARGE-STATIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}, %rax1374; LARGE-STATIC-NEXT: addss (%rax), %xmm01375; LARGE-STATIC-NEXT: retq1376;1377; SMALL-PIC-LABEL: load_constant_pool:1378; SMALL-PIC: # %bb.0:1379; SMALL-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01380; SMALL-PIC-NEXT: retq1381;1382; MEDIUM-SMALL-DATA-PIC-LABEL: load_constant_pool:1383; MEDIUM-SMALL-DATA-PIC: # %bb.0:1384; MEDIUM-SMALL-DATA-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01385; MEDIUM-SMALL-DATA-PIC-NEXT: retq1386;1387; MEDIUM-PIC-LABEL: load_constant_pool:1388; MEDIUM-PIC: # %bb.0:1389; MEDIUM-PIC-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01390; MEDIUM-PIC-NEXT: retq1391;1392; LARGE-PIC-LABEL: load_constant_pool:1393; LARGE-PIC: # %bb.0:1394; LARGE-PIC-NEXT: .L26$pb:1395; LARGE-PIC-NEXT: leaq .L26$pb(%rip), %rax1396; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L26$pb, %rcx1397; LARGE-PIC-NEXT: addq %rax, %rcx1398; LARGE-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax1399; LARGE-PIC-NEXT: addss (%rcx,%rax), %xmm01400; LARGE-PIC-NEXT: retq1401;1402; LARGE-SMALL-DATA-PIC-LABEL: load_constant_pool:1403; LARGE-SMALL-DATA-PIC: # %bb.0:1404; LARGE-SMALL-DATA-PIC-NEXT: .L26$pb:1405; LARGE-SMALL-DATA-PIC-NEXT: leaq .L26$pb(%rip), %rax1406; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L26$pb, %rcx1407; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx1408; LARGE-SMALL-DATA-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax1409; LARGE-SMALL-DATA-PIC-NEXT: addss (%rcx,%rax), %xmm01410; LARGE-SMALL-DATA-PIC-NEXT: retq1411 %a = fadd float %x, 1.01412 ret float %a1413}1414 1415attributes #0 = { noinline nounwind uwtable }1416 1417!llvm.module.flags = !{!0, !1, !2}1418!llvm.ident = !{!3}1419 1420!0 = !{i32 1, !"wchar_size", i32 4}1421!1 = !{i32 7, !"PIC Level", i32 2}1422!2 = !{i32 7, !"PIE Level", i32 2}1423!3 = !{!"clang version 7.0.0 "}1424