Home | History | Annotate | Download | only in AArch64
      1 ; RUN: opt -cost-model -analyze -mtriple=aarch64--linux-gnu < %s | FileCheck %s
      2 
      3 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
      4 target triple = "aarch64--linux-gnu"
      5 
      6 define i8 @test1(i8* %p) {
      7 ; CHECK-LABEL: test1
      8 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
      9   %a = getelementptr inbounds i8, i8* %p, i32 0
     10   %v = load i8, i8* %a
     11   ret i8 %v
     12 }
     13 
     14 define i16 @test2(i16* %p) {
     15 ; CHECK-LABEL: test2
     16 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
     17   %a = getelementptr inbounds i16, i16* %p, i32 0
     18   %v = load i16, i16* %a
     19   ret i16 %v
     20 }
     21 
     22 define i32 @test3(i32* %p) {
     23 ; CHECK-LABEL: test3
     24 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i32, i32*
     25   %a = getelementptr inbounds i32, i32* %p, i32 0
     26   %v = load i32, i32* %a
     27   ret i32 %v
     28 }
     29 
     30 define i64 @test4(i64* %p) {
     31 ; CHECK-LABEL: test4
     32 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i64, i64*
     33   %a = getelementptr inbounds i64, i64* %p, i32 0
     34   %v = load i64, i64* %a
     35   ret i64 %v
     36 }
     37 
     38 define i8 @test5(i8* %p) {
     39 ; CHECK-LABEL: test5
     40 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
     41   %a = getelementptr inbounds i8, i8* %p, i32 1024
     42   %v = load i8, i8* %a
     43   ret i8 %v
     44 }
     45 
     46 define i16 @test6(i16* %p) {
     47 ; CHECK-LABEL: test6
     48 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
     49   %a = getelementptr inbounds i16, i16* %p, i32 1024
     50   %v = load i16, i16* %a
     51   ret i16 %v
     52 }
     53 
     54 define i32 @test7(i32* %p) {
     55 ; CHECK-LABEL: test7
     56 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i32, i32*
     57   %a = getelementptr inbounds i32, i32* %p, i32 1024
     58   %v = load i32, i32* %a
     59   ret i32 %v
     60 }
     61 
     62 define i64 @test8(i64* %p) {
     63 ; CHECK-LABEL: test8
     64 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i64, i64*
     65   %a = getelementptr inbounds i64, i64* %p, i32 1024
     66   %v = load i64, i64* %a
     67   ret i64 %v
     68 }
     69 
     70 define i8 @test9(i8* %p) {
     71 ; CHECK-LABEL: test9
     72 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i8, i8*
     73   %a = getelementptr inbounds i8, i8* %p, i32 4096
     74   %v = load i8, i8* %a
     75   ret i8 %v
     76 }
     77 
     78 define i16 @test10(i16* %p) {
     79 ; CHECK-LABEL: test10
     80 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i16, i16*
     81   %a = getelementptr inbounds i16, i16* %p, i32 4096
     82   %v = load i16, i16* %a
     83   ret i16 %v
     84 }
     85 
     86 define i32 @test11(i32* %p) {
     87 ; CHECK-LABEL: test11
     88 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i32, i32*
     89   %a = getelementptr inbounds i32, i32* %p, i32 4096
     90   %v = load i32, i32* %a
     91   ret i32 %v
     92 }
     93 
     94 define i64 @test12(i64* %p) {
     95 ; CHECK-LABEL: test12
     96 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
     97   %a = getelementptr inbounds i64, i64* %p, i32 4096
     98   %v = load i64, i64* %a
     99   ret i64 %v
    100 }
    101 
    102 define i8 @test13(i8* %p) {
    103 ; CHECK-LABEL: test13
    104 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
    105   %a = getelementptr inbounds i8, i8* %p, i32 -64
    106   %v = load i8, i8* %a
    107   ret i8 %v
    108 }
    109 
    110 define i16 @test14(i16* %p) {
    111 ; CHECK-LABEL: test14
    112 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
    113   %a = getelementptr inbounds i16, i16* %p, i32 -64
    114   %v = load i16, i16* %a
    115   ret i16 %v
    116 }
    117 
    118 define i32 @test15(i32* %p) {
    119 ; CHECK-LABEL: test15
    120 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i32, i32*
    121   %a = getelementptr inbounds i32, i32* %p, i32 -64
    122   %v = load i32, i32* %a
    123   ret i32 %v
    124 }
    125 
    126 define i64 @test16(i64* %p) {
    127 ; CHECK-LABEL: test16
    128 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
    129   %a = getelementptr inbounds i64, i64* %p, i32 -64
    130   %v = load i64, i64* %a
    131   ret i64 %v
    132 }
    133 
    134 define i8 @test17(i8* %p) {
    135 ; CHECK-LABEL: test17
    136 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i8, i8*
    137   %a = getelementptr inbounds i8, i8* %p, i32 -1024
    138   %v = load i8, i8* %a
    139   ret i8 %v
    140 }
    141 
    142 define i16 @test18(i16* %p) {
    143 ; CHECK-LABEL: test18
    144 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i16, i16*
    145   %a = getelementptr inbounds i16, i16* %p, i32 -1024
    146   %v = load i16, i16* %a
    147   ret i16 %v
    148 }
    149 
    150 define i32 @test19(i32* %p) {
    151 ; CHECK-LABEL: test19
    152 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i32, i32*
    153   %a = getelementptr inbounds i32, i32* %p, i32 -1024
    154   %v = load i32, i32* %a
    155   ret i32 %v
    156 }
    157 
    158 define i64 @test20(i64* %p) {
    159 ; CHECK-LABEL: test20
    160 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
    161   %a = getelementptr inbounds i64, i64* %p, i32 -1024
    162   %v = load i64, i64* %a
    163   ret i64 %v
    164 }
    165 
    166 define i8 @test21(i8* %p, i32 %i) {
    167 ; CHECK-LABEL: test21
    168 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
    169   %a = getelementptr inbounds i8, i8* %p, i32 %i
    170   %v = load i8, i8* %a
    171   ret i8 %v
    172 }
    173 
    174 define i16 @test22(i16* %p, i32 %i) {
    175 ; CHECK-LABEL: test22
    176 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
    177   %a = getelementptr inbounds i16, i16* %p, i32 %i
    178   %v = load i16, i16* %a
    179   ret i16 %v
    180 }
    181 
    182 define i32 @test23(i32* %p, i32 %i) {
    183 ; CHECK-LABEL: test23
    184 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i32, i32*
    185   %a = getelementptr inbounds i32, i32* %p, i32 %i
    186   %v = load i32, i32* %a
    187   ret i32 %v
    188 }
    189 
    190 define i64 @test24(i64* %p, i32 %i) {
    191 ; CHECK-LABEL: test24
    192 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i64, i64*
    193   %a = getelementptr inbounds i64, i64* %p, i32 %i
    194   %v = load i64, i64* %a
    195   ret i64 %v
    196 }
    197 
    198 define i8 @test25(i8* %p) {
    199 ; CHECK-LABEL: test25
    200 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
    201   %a = getelementptr inbounds i8, i8* %p, i32 -128
    202   %v = load i8, i8* %a
    203   ret i8 %v
    204 }
    205 
    206 define i16 @test26(i16* %p) {
    207 ; CHECK-LABEL: test26
    208 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
    209   %a = getelementptr inbounds i16, i16* %p, i32 -128
    210   %v = load i16, i16* %a
    211   ret i16 %v
    212 }
    213 
    214 define i32 @test27(i32* %p) {
    215 ; CHECK-LABEL: test27
    216 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i32, i32*
    217   %a = getelementptr inbounds i32, i32* %p, i32 -128
    218   %v = load i32, i32* %a
    219   ret i32 %v
    220 }
    221 
    222 define i64 @test28(i64* %p) {
    223 ; CHECK-LABEL: test28
    224 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
    225   %a = getelementptr inbounds i64, i64* %p, i32 -128
    226   %v = load i64, i64* %a
    227   ret i64 %v
    228 }
    229 
    230 define i8 @test29(i8* %p) {
    231 ; CHECK-LABEL: test29
    232 ; CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
    233   %a = getelementptr inbounds i8, i8* %p, i32 -256
    234   %v = load i8, i8* %a
    235   ret i8 %v
    236 }
    237 
    238 define i16 @test30(i16* %p) {
    239 ; CHECK-LABEL: test30
    240 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i16, i16*
    241   %a = getelementptr inbounds i16, i16* %p, i32 -256
    242   %v = load i16, i16* %a
    243   ret i16 %v
    244 }
    245 
    246 define i32 @test31(i32* %p) {
    247 ; CHECK-LABEL: test31
    248 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i32, i32*
    249   %a = getelementptr inbounds i32, i32* %p, i32 -256
    250   %v = load i32, i32* %a
    251   ret i32 %v
    252 }
    253 
    254 define i64 @test32(i64* %p) {
    255 ; CHECK-LABEL: test32
    256 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
    257   %a = getelementptr inbounds i64, i64* %p, i32 -256
    258   %v = load i64, i64* %a
    259   ret i64 %v
    260 }
    261 
    262 define i8 @test33(i8* %p) {
    263 ; CHECK-LABEL: test33
    264 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i8, i8*
    265   %a = getelementptr inbounds i8, i8* %p, i32 -512
    266   %v = load i8, i8* %a
    267   ret i8 %v
    268 }
    269 
    270 define i16 @test34(i16* %p) {
    271 ; CHECK-LABEL: test34
    272 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i16, i16*
    273   %a = getelementptr inbounds i16, i16* %p, i32 -512
    274   %v = load i16, i16* %a
    275   ret i16 %v
    276 }
    277 
    278 define i32 @test35(i32* %p) {
    279 ; CHECK-LABEL: test35
    280 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i32, i32*
    281   %a = getelementptr inbounds i32, i32* %p, i32 -512
    282   %v = load i32, i32* %a
    283   ret i32 %v
    284 }
    285 
    286 define i64 @test36(i64* %p) {
    287 ; CHECK-LABEL: test36
    288 ; CHECK: cost of 1 for instruction: {{.*}} getelementptr inbounds i64, i64*
    289   %a = getelementptr inbounds i64, i64* %p, i32 -512
    290   %v = load i64, i64* %a
    291   ret i64 %v
    292 }
    293