brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 1c8ab65 Raw
104 lines · plain
1; RUN: opt < %s -passes=dfsan -dfsan-combine-pointer-labels-on-store=1 -S | FileCheck %s --check-prefixes=CHECK,COMBINE_PTR_LABEL2; RUN: opt < %s -passes=dfsan -dfsan-combine-pointer-labels-on-store=0 -S | FileCheck %s --check-prefixes=CHECK,NO_COMBINE_PTR_LABEL3target 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"4target triple = "x86_64-unknown-linux-gnu"5 6define void @store0({} %v, ptr %p) {7  ; CHECK-LABEL: @store0.dfsan8  ; CHECK:       store {} %v, ptr %p9  ; CHECK-NOT:   store10  ; CHECK:       ret void11 12  store {} %v, ptr %p13  ret void14}15 16define void @store8(i8 %v, ptr %p) {17  ; CHECK-LABEL:       @store8.dfsan18  ; NO_COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls19  ; COMBINE_PTR_LABEL:    load i8, ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 220 21  ; COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls22  ; COMBINE_PTR_LABEL: or i823  ; CHECK:             ptrtoint ptr {{.*}} i6424  ; CHECK-NEXT:        xor i6425  ; CHECK-NEXT:        inttoptr i64 {{.*}} ptr26  ; CHECK-NEXT:        getelementptr i8, ptr27  ; CHECK-NEXT:        store i828  ; CHECK-NEXT:        store i8 %v, ptr %p29  ; CHECK-NEXT:        ret void30 31  store i8 %v, ptr %p32  ret void33}34 35define void @store16(i16 %v, ptr %p) {36  ; CHECK-LABEL:       @store16.dfsan37  ; NO_COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls38  ; COMBINE_PTR_LABEL:    load i8, ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 239  ; COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls40  ; COMBINE_PTR_LABEL: or i841  ; CHECK:             ptrtoint ptr {{.*}} i6442  ; CHECK-NEXT:        xor i6443  ; CHECK-NEXT:        inttoptr i64 {{.*}} ptr44  ; CHECK-NEXT:        getelementptr i8, ptr45  ; CHECK-NEXT:        store i846  ; CHECK-NEXT:        getelementptr i8, ptr47  ; CHECK-NEXT:        store i848  ; CHECK-NEXT:        store i16 %v, ptr %p49  ; CHECK-NEXT:        ret void50 51  store i16 %v, ptr %p52  ret void53}54 55define void @store32(i32 %v, ptr %p) {56  ; CHECK-LABEL:       @store32.dfsan57  ; NO_COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls58  ; COMBINE_PTR_LABEL:    load i8, ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 259  ; COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls60  ; COMBINE_PTR_LABEL: or i861  ; CHECK:             ptrtoint ptr {{.*}} i6462  ; CHECK-NEXT:        xor i6463  ; CHECK-NEXT:        inttoptr i64 {{.*}} ptr64  ; CHECK-NEXT:        getelementptr i8, ptr65  ; CHECK-NEXT:        store i866  ; CHECK-NEXT:        getelementptr i8, ptr67  ; CHECK-NEXT:        store i868  ; CHECK-NEXT:        getelementptr i8, ptr69  ; CHECK-NEXT:        store i870  ; CHECK-NEXT:        getelementptr i8, ptr71  ; CHECK-NEXT:        store i872  ; CHECK-NEXT:        store i32 %v, ptr %p73  ; CHECK-NEXT:        ret void74 75  store i32 %v, ptr %p76  ret void77}78 79define void @store64(i64 %v, ptr %p) {80  ; CHECK-LABEL:       @store64.dfsan81  ; NO_COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls82  ; COMBINE_PTR_LABEL:    load i8, ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 283  ; COMBINE_PTR_LABEL: load i8, ptr @__dfsan_arg_tls84  ; COMBINE_PTR_LABEL: or i885  ; CHECK:             ptrtoint ptr {{.*}} i6486  ; CHECK-NEXT:        xor i6487  ; CHECK-NEXT:        inttoptr i64 {{.*}} ptr88  ; CHECK-COUNT-8:     insertelement {{.*}} i889  ; CHECK-NEXT:        getelementptr <8 x i8>90  ; CHECK-NEXT:        store <8 x i8>91  ; CHECK-NEXT:        store i64 %v, ptr %p92  ; CHECK-NEXT:        ret void93 94  store i64 %v, ptr %p95  ret void96}97 98define void @store_zero(ptr %p) {99  ; CHECK-LABEL:          @store_zero.dfsan100  ; NO_COMBINE_PTR_LABEL: store i32 0, ptr {{.*}}101  store i32 0, ptr %p102  ret void103}104