Home | History | Annotate | Download | only in DataFlowSanitizer
      1 ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=1 -S | FileCheck %s --check-prefix=COMBINE_PTR_LABEL
      2 ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=0 -S | FileCheck %s --check-prefix=NO_COMBINE_PTR_LABEL
      3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
      4 
      5 define void @store8(i8 %v, i8* %p) {
      6   ; NO_COMBINE_PTR_LABEL: @"dfs$store8"
      7   ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
      8   ; NO_COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
      9   ; NO_COMBINE_PTR_LABEL: and i64
     10   ; NO_COMBINE_PTR_LABEL: mul i64
     11   ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     12   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     13   ; NO_COMBINE_PTR_LABEL: store i16
     14   ; NO_COMBINE_PTR_LABEL: store i8
     15 
     16   ; COMBINE_PTR_LABEL: @"dfs$store8"
     17   ; COMBINE_PTR_LABEL: load i16*
     18   ; COMBINE_PTR_LABEL: load i16*
     19   ; COMBINE_PTR_LABEL: icmp ne i16
     20   ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
     21   ; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
     22   ; COMBINE_PTR_LABEL: and i64
     23   ; COMBINE_PTR_LABEL: mul i64
     24   ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     25   ; COMBINE_PTR_LABEL: getelementptr i16*
     26   ; COMBINE_PTR_LABEL: store i16
     27   ; COMBINE_PTR_LABEL: store i8
     28 
     29   store i8 %v, i8* %p
     30   ret void
     31 }
     32 
     33 define void @store16(i16 %v, i16* %p) {
     34   ; NO_COMBINE_PTR_LABEL: @"dfs$store16"
     35   ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     36   ; NO_COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
     37   ; NO_COMBINE_PTR_LABEL: and i64
     38   ; NO_COMBINE_PTR_LABEL: mul i64
     39   ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     40   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     41   ; NO_COMBINE_PTR_LABEL: store i16
     42   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     43   ; NO_COMBINE_PTR_LABEL: store i16
     44   ; NO_COMBINE_PTR_LABEL: store i16
     45 
     46   ; COMBINE_PTR_LABEL: @"dfs$store16"
     47   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     48   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     49   ; COMBINE_PTR_LABEL: icmp ne i16
     50   ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
     51   ; COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
     52   ; COMBINE_PTR_LABEL: and i64
     53   ; COMBINE_PTR_LABEL: mul i64
     54   ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     55   ; COMBINE_PTR_LABEL: getelementptr i16*
     56   ; COMBINE_PTR_LABEL: store i16
     57   ; COMBINE_PTR_LABEL: getelementptr i16*
     58   ; COMBINE_PTR_LABEL: store i16
     59   ; COMBINE_PTR_LABEL: store i16
     60 
     61   store i16 %v, i16* %p
     62   ret void
     63 }
     64 
     65 define void @store32(i32 %v, i32* %p) {
     66   ; NO_COMBINE_PTR_LABEL: @"dfs$store32"
     67   ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     68   ; NO_COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
     69   ; NO_COMBINE_PTR_LABEL: and i64
     70   ; NO_COMBINE_PTR_LABEL: mul i64
     71   ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     72   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     73   ; NO_COMBINE_PTR_LABEL: store i16
     74   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     75   ; NO_COMBINE_PTR_LABEL: store i16
     76   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     77   ; NO_COMBINE_PTR_LABEL: store i16
     78   ; NO_COMBINE_PTR_LABEL: getelementptr i16*
     79   ; NO_COMBINE_PTR_LABEL: store i16
     80   ; NO_COMBINE_PTR_LABEL: store i32
     81 
     82   ; COMBINE_PTR_LABEL: @"dfs$store32"
     83   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     84   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
     85   ; COMBINE_PTR_LABEL: icmp ne i16
     86   ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
     87   ; COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
     88   ; COMBINE_PTR_LABEL: and i64
     89   ; COMBINE_PTR_LABEL: mul i64
     90   ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
     91   ; COMBINE_PTR_LABEL: getelementptr i16*
     92   ; COMBINE_PTR_LABEL: store i16
     93   ; COMBINE_PTR_LABEL: getelementptr i16*
     94   ; COMBINE_PTR_LABEL: store i16
     95   ; COMBINE_PTR_LABEL: getelementptr i16*
     96   ; COMBINE_PTR_LABEL: store i16
     97   ; COMBINE_PTR_LABEL: getelementptr i16*
     98   ; COMBINE_PTR_LABEL: store i16
     99   ; COMBINE_PTR_LABEL: store i32
    100 
    101   store i32 %v, i32* %p
    102   ret void
    103 }
    104 
    105 define void @store64(i64 %v, i64* %p) {
    106   ; NO_COMBINE_PTR_LABEL: @"dfs$store64"
    107   ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
    108   ; NO_COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
    109   ; NO_COMBINE_PTR_LABEL: and i64
    110   ; NO_COMBINE_PTR_LABEL: mul i64
    111   ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
    112   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    113   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    114   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    115   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    116   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    117   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    118   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    119   ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
    120   ; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
    121   ; NO_COMBINE_PTR_LABEL: store i64
    122 
    123   ; COMBINE_PTR_LABEL: @"dfs$store64"
    124   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
    125   ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
    126   ; COMBINE_PTR_LABEL: icmp ne i16
    127   ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
    128   ; COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
    129   ; COMBINE_PTR_LABEL: and i64
    130   ; COMBINE_PTR_LABEL: mul i64
    131   ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
    132   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    133   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    134   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    135   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    136   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    137   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    138   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    139   ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
    140   ; COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
    141   ; COMBINE_PTR_LABEL: store <8 x i16>
    142   ; COMBINE_PTR_LABEL: store i64
    143 
    144   store i64 %v, i64* %p
    145   ret void
    146 }
    147