1*fe7f5f91SVitaly Buka; RUN: opt < %s -msan-check-access-address=0 -S -passes=msan 2>&1 | FileCheck %s 21df8549bSEvgenii Stepanov; REQUIRES: x86-registered-target 31df8549bSEvgenii Stepanov 41df8549bSEvgenii Stepanovtarget 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" 51df8549bSEvgenii Stepanovtarget triple = "x86_64-unknown-linux-gnu" 61df8549bSEvgenii Stepanov 71df8549bSEvgenii Stepanovdeclare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8 immarg) nounwind readnone 81df8549bSEvgenii Stepanovdeclare <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64>, <4 x i64>, i8 immarg) nounwind readnone 91df8549bSEvgenii Stepanovdeclare <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64>, <8 x i64>, i8 immarg) nounwind readnone 101df8549bSEvgenii Stepanov 111df8549bSEvgenii Stepanovdefine <2 x i64> @clmul00(<2 x i64> %a, <2 x i64> %b) sanitize_memory { 121df8549bSEvgenii Stepanoventry: 131df8549bSEvgenii Stepanov %0 = tail call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a, <2 x i64> %b, i8 0) 141df8549bSEvgenii Stepanov ret <2 x i64> %0 151df8549bSEvgenii Stepanov} 161df8549bSEvgenii Stepanov 171df8549bSEvgenii Stepanov; CHECK-LABEL: @clmul00 1841d5033eSNikita Popov; CHECK: %[[S0:.*]] = load <2 x i64>, ptr {{.*}}@__msan_param_tls 1941d5033eSNikita Popov; CHECK: %[[S1:.*]] = load <2 x i64>, ptr {{.*}}@__msan_param_tls 209b296102SJuneyoung Lee; CHECK: %[[SHUF0:.*]] = shufflevector <2 x i64> %[[S0]], <2 x i64> poison, <2 x i32> zeroinitializer 219b296102SJuneyoung Lee; CHECK: %[[SHUF1:.*]] = shufflevector <2 x i64> %[[S1]], <2 x i64> poison, <2 x i32> zeroinitializer 2236ebabc1SGui Andrade; CHECK: %[[SRET:.*]] = or <2 x i64> %[[SHUF0]], %[[SHUF1]] 2341d5033eSNikita Popov; CHECK: store <2 x i64> %[[SRET]], ptr {{.*}}@__msan_retval_tls 241df8549bSEvgenii Stepanov 251df8549bSEvgenii Stepanovdefine <2 x i64> @clmul10(<2 x i64> %a, <2 x i64> %b) sanitize_memory { 261df8549bSEvgenii Stepanoventry: 271df8549bSEvgenii Stepanov %0 = tail call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a, <2 x i64> %b, i8 16) 281df8549bSEvgenii Stepanov ret <2 x i64> %0 291df8549bSEvgenii Stepanov} 301df8549bSEvgenii Stepanov 311df8549bSEvgenii Stepanov; CHECK-LABEL: @clmul10 3241d5033eSNikita Popov; CHECK: %[[S0:.*]] = load <2 x i64>, ptr {{.*}}@__msan_param_tls 3341d5033eSNikita Popov; CHECK: %[[S1:.*]] = load <2 x i64>, ptr {{.*}}@__msan_param_tls 349b296102SJuneyoung Lee; CHECK: %[[SHUF0:.*]] = shufflevector <2 x i64> %[[S0]], <2 x i64> poison, <2 x i32> zeroinitializer 359b296102SJuneyoung Lee; CHECK: %[[SHUF1:.*]] = shufflevector <2 x i64> %[[S1]], <2 x i64> poison, <2 x i32> <i32 1, i32 1> 3636ebabc1SGui Andrade; CHECK: %[[SRET:.*]] = or <2 x i64> %[[SHUF0]], %[[SHUF1]] 3741d5033eSNikita Popov; CHECK: store <2 x i64> %[[SRET]], ptr {{.*}}@__msan_retval_tls 381df8549bSEvgenii Stepanov 391df8549bSEvgenii Stepanovdefine <4 x i64> @clmul11_256(<4 x i64> %a, <4 x i64> %b) sanitize_memory { 401df8549bSEvgenii Stepanoventry: 411df8549bSEvgenii Stepanov %0 = tail call <4 x i64> @llvm.x86.pclmulqdq.256(<4 x i64> %a, <4 x i64> %b, i8 17) 421df8549bSEvgenii Stepanov ret <4 x i64> %0 431df8549bSEvgenii Stepanov} 441df8549bSEvgenii Stepanov 451df8549bSEvgenii Stepanov; CHECK-LABEL: @clmul11_256 4641d5033eSNikita Popov; CHECK: %[[S0:.*]] = load <4 x i64>, ptr {{.*}}@__msan_param_tls 4741d5033eSNikita Popov; CHECK: %[[S1:.*]] = load <4 x i64>, ptr {{.*}}@__msan_param_tls 489b296102SJuneyoung Lee; CHECK: %[[SHUF0:.*]] = shufflevector <4 x i64> %[[S0]], <4 x i64> poison, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 499b296102SJuneyoung Lee; CHECK: %[[SHUF1:.*]] = shufflevector <4 x i64> %[[S1]], <4 x i64> poison, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 5036ebabc1SGui Andrade; CHECK: %[[SRET:.*]] = or <4 x i64> %[[SHUF0]], %[[SHUF1]] 5141d5033eSNikita Popov; CHECK: store <4 x i64> %[[SRET]], ptr {{.*}}@__msan_retval_tls 521df8549bSEvgenii Stepanov 531df8549bSEvgenii Stepanovdefine <8 x i64> @clmul01_512(<8 x i64> %a, <8 x i64> %b) sanitize_memory { 541df8549bSEvgenii Stepanoventry: 551df8549bSEvgenii Stepanov %0 = tail call <8 x i64> @llvm.x86.pclmulqdq.512(<8 x i64> %a, <8 x i64> %b, i8 16) 561df8549bSEvgenii Stepanov ret <8 x i64> %0 571df8549bSEvgenii Stepanov} 581df8549bSEvgenii Stepanov 591df8549bSEvgenii Stepanov; CHECK-LABEL: @clmul01_512 6041d5033eSNikita Popov; CHECK: %[[S0:.*]] = load <8 x i64>, ptr {{.*}}@__msan_param_tls 6141d5033eSNikita Popov; CHECK: %[[S1:.*]] = load <8 x i64>, ptr {{.*}}@__msan_param_tls 629b296102SJuneyoung Lee; CHECK: %[[SHUF0:.*]] = shufflevector <8 x i64> %[[S0]], <8 x i64> poison, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> 639b296102SJuneyoung Lee; CHECK: %[[SHUF1:.*]] = shufflevector <8 x i64> %[[S1]], <8 x i64> poison, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> 6436ebabc1SGui Andrade; CHECK: %[[SRET:.*]] = or <8 x i64> %[[SHUF0]], %[[SHUF1]] 6536ebabc1SGui Andrade; ORIGIN: %[[FLAT:.*]] = bitcast <8 x i64> %[[SHUF1]] to i512 661df8549bSEvgenii Stepanov; ORIGIN: %[[I:.*]] = icmp ne i512 %[[FLAT]], 0 671df8549bSEvgenii Stepanov; ORIGIN: %[[O:.*]] = select i1 %[[I]], 6841d5033eSNikita Popov; CHECK: store <8 x i64> %[[SRET]], ptr {{.*}}@__msan_retval_tls 6921c3df4bSMatt Arsenault; ORIGIN: store i32 %[[O]], ptr @__msan_retval_origin_tls 70