Home | History | Annotate | Download | only in X86
      1 # RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s | FileCheck %s
      2 # This test ensures that the MIR parser parses global value operands correctly.
      3 
      4 --- |
      5 
      6   @G = external global i32
      7   @0 = external global i32
      8 
      9   define i32 @inc() {
     10   entry:
     11     %a = load i32, i32* @G
     12     %b = add i32 %a, 1
     13     ret i32 %b
     14   }
     15 
     16   define i32 @inc2() {
     17   entry:
     18     %a = load i32, i32* @0
     19     %b = add i32 %a, 1
     20     ret i32 %b
     21   }
     22 
     23   @.$0  = external global i32
     24   @-_-  = external global i32
     25   @_-_a = external global i32
     26   @$.-B = external global i32
     27 
     28   define i32 @test() {
     29   entry:
     30     %a = load i32, i32* @.$0
     31     store i32 %a, i32* @-_-
     32     %b = load i32, i32* @_-_a
     33     store i32 %b, i32* @$.-B
     34     ret i32 %b
     35   }
     36 
     37   @"\01Hello@$%09 \\ World," = external global i32
     38 
     39   define i32 @test2() {
     40   entry:
     41     %a = load i32, i32* @"\01Hello@$%09 \\ World,"
     42     ret i32 %a
     43   }
     44 
     45   define i32 @test3() {
     46   entry:
     47     %a = load i32, i32* @.$0
     48     store i32 %a, i32* @-_-
     49     %b = load i32, i32* @_-_a
     50     store i32 %b, i32* @$.-B
     51     ret i32 %b
     52   }
     53 
     54   define i32 @tf() {
     55   entry:
     56     %a = load i32, i32* @G
     57     %b = add i32 %a, 1
     58     ret i32 %b
     59   }
     60 
     61 ...
     62 ---
     63 # CHECK: name: inc
     64 name: inc
     65 body: |
     66   bb.0.entry:
     67     ; CHECK: %rax = MOV64rm %rip, 1, _, @G, _
     68     %rax = MOV64rm %rip, 1, _, @G, _
     69     %eax = MOV32rm %rax, 1, _, 0, _
     70     %eax = INC32r %eax, implicit-def %eflags
     71     RETQ %eax
     72 ...
     73 ---
     74 # CHECK: name: inc2
     75 name: inc2
     76 body: |
     77   bb.0.entry:
     78     ; CHECK: %rax = MOV64rm %rip, 1, _, @0, _
     79     %rax = MOV64rm %rip, 1, _, @0, _
     80     %eax = MOV32rm %rax, 1, _, 0, _
     81     %eax = INC32r %eax, implicit-def %eflags
     82     RETQ %eax
     83 ...
     84 ---
     85 name:            test
     86 body: |
     87   bb.0.entry:
     88     ; CHECK: , @".$0",
     89     ; CHECK: , @-_-,
     90     ; CHECK: , @_-_a,
     91     ; CHECK: , @"$.-B",
     92     %rax = MOV64rm %rip, 1, _, @.$0, _
     93     %eax = MOV32rm killed %rax, 1, _, 0, _
     94     %rcx = MOV64rm %rip, 1, _, @-_-, _
     95     MOV32mr killed %rcx, 1, _, 0, _, killed %eax
     96     %rax = MOV64rm %rip, 1, _, @_-_a, _
     97     %eax = MOV32rm killed %rax, 1, _, 0, _
     98     %rcx = MOV64rm %rip, 1, _, @$.-B, _
     99     MOV32mr killed %rcx, 1, _, 0, _, %eax
    100     RETQ %eax
    101 ...
    102 ---
    103 name:            test2
    104 body: |
    105   bb.0.entry:
    106     ; CHECK: , @"\01Hello@$%09 \5C World,",
    107     %rax = MOV64rm %rip, 1, _, @"\01Hello@$%09 \\ World,", _
    108     %eax = MOV32rm killed %rax, 1, _, 0, _
    109     RETQ %eax
    110 ...
    111 ---
    112 # CHECK: name: test3
    113 name:            test3
    114 body: |
    115   bb.0.entry:
    116     ; CHECK: , @".$0",
    117     ; CHECK: , @-_-,
    118     ; CHECK: , @_-_a + 4,
    119     ; CHECK: , @"$.-B" - 8,
    120     %rax = MOV64rm %rip, 1, _, @.$0 + 0, _
    121     %eax = MOV32rm killed %rax, 1, _, 0, _
    122     %rcx = MOV64rm %rip, 1, _, @-_- - 0, _
    123     MOV32mr killed %rcx, 1, _, 0, _, killed %eax
    124     %rax = MOV64rm %rip, 1, _, @_-_a + 4, _
    125     %eax = MOV32rm killed %rax, 1, _, 0, _
    126     %rcx = MOV64rm %rip, 1, _, @$.-B - 8, _
    127     MOV32mr killed %rcx, 1, _, 0, _, %eax
    128     RETQ %eax
    129 ...
    130 ---
    131 # CHECK: name: tf
    132 name: tf
    133 body: |
    134   bb.0.entry:
    135   ; CHECK: %rax = MOV64rm %rip, 1, _, target-flags(x86-gotpcrel) @G, _
    136     %rax = MOV64rm %rip, 1, _, target-flags(x86-gotpcrel) @G, _
    137     %eax = MOV32rm %rax, 1, _, 0, _
    138     %eax = INC32r %eax, implicit-def %eflags
    139     RETQ %eax
    140 ...
    141