; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=dfsan -dfsan-track-origins=1  -dfsan-instrument-with-call-threshold=0 -dfsan-add-global-name-suffix=0 -S | FileCheck %s
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"
target triple = "x86_64-unknown-linux-gnu"

define void @store_threshold(ptr %p, [2 x i64] %a) {
; CHECK-LABEL: define void @store_threshold(
; CHECK-SAME: ptr [[P:%.*]], [2 x i64] [[A:%.*]]) {
; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr getelementptr inbounds ([200 x i32], ptr @__dfsan_arg_origin_tls, i64 0, i64 1), align 4
; CHECK-NEXT:    [[TMP2:%.*]] = load [2 x i8], ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 2
; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue [2 x i8] [[TMP2]], 0
; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue [2 x i8] [[TMP2]], 1
; CHECK-NEXT:    [[TMP5:%.*]] = or i8 [[TMP3]], [[TMP4]]
; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[P]] to i64
; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 87960930222080
; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr
; CHECK-NEXT:    [[TMP9:%.*]] = add i64 [[TMP7]], 17592186044416
; CHECK-NEXT:    [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr
; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <8 x i8> poison, i8 [[TMP5]], i32 0
; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <8 x i8> [[TMP11]], i8 [[TMP5]], i32 1
; CHECK-NEXT:    [[TMP13:%.*]] = insertelement <8 x i8> [[TMP12]], i8 [[TMP5]], i32 2
; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <8 x i8> [[TMP13]], i8 [[TMP5]], i32 3
; CHECK-NEXT:    [[TMP15:%.*]] = insertelement <8 x i8> [[TMP14]], i8 [[TMP5]], i32 4
; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <8 x i8> [[TMP15]], i8 [[TMP5]], i32 5
; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <8 x i8> [[TMP16]], i8 [[TMP5]], i32 6
; CHECK-NEXT:    [[TMP18:%.*]] = insertelement <8 x i8> [[TMP17]], i8 [[TMP5]], i32 7
; CHECK-NEXT:    [[TMP19:%.*]] = getelementptr <8 x i8>, ptr [[TMP8]], i32 0
; CHECK-NEXT:    store <8 x i8> [[TMP18]], ptr [[TMP19]], align 1
; CHECK-NEXT:    [[TMP20:%.*]] = getelementptr <8 x i8>, ptr [[TMP8]], i32 1
; CHECK-NEXT:    store <8 x i8> [[TMP18]], ptr [[TMP20]], align 1
; CHECK-NEXT:    call void @__dfsan_maybe_store_origin(i8 [[TMP5]], ptr [[P]], i64 16, i32 [[TMP1]])
; CHECK-NEXT:    store [2 x i64] [[A]], ptr [[P]], align 8
; CHECK-NEXT:    ret void
;

  store [2 x i64] %a, ptr %p
  ret void
}
