167ad31c8SKevin Athey; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 267ad31c8SKevin Athey; RUN: opt %s -S -passes=msan 2>&1 | FileCheck %s 367ad31c8SKevin Athey 467ad31c8SKevin Atheytarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 567ad31c8SKevin Atheytarget triple = "x86_64-unknown-linux-gnu" 667ad31c8SKevin Athey 767ad31c8SKevin Atheydeclare i64 @llvm.ctlz.i64(i64, i1) nounwind readnone 867ad31c8SKevin Atheydefine i64 @test_ctlz_i64_zeropoison(i64 %v) #0 { 967ad31c8SKevin Athey; CHECK-LABEL: @test_ctlz_i64_zeropoison( 1067ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8 1167ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 12*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne i64 [[TMP1]], 0 13*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BZP:%.*]] = icmp eq i64 [[V:%.*]], 0 14*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS1:%.*]] = or i1 [[_MSCZ_BS]], [[_MSCZ_BZP]] 15*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext i1 [[_MSCZ_BS1]] to i64 16*31bfa4a6SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call i64 @llvm.ctlz.i64(i64 [[V]], i1 true) 17*31bfa4a6SKevin Athey; CHECK-NEXT: store i64 [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 1867ad31c8SKevin Athey; CHECK-NEXT: ret i64 [[RES]] 1967ad31c8SKevin Athey; 2067ad31c8SKevin Athey %res = call i64 @llvm.ctlz.i64(i64 %v, i1 true) ; <<i64>> [#uses=1] 2167ad31c8SKevin Athey ret i64 %res 2267ad31c8SKevin Athey} 2367ad31c8SKevin Atheydefine i64 @test_ctlz_i64_nozeropoison(i64 %v) #0 { 2467ad31c8SKevin Athey; CHECK-LABEL: @test_ctlz_i64_nozeropoison( 2567ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8 2667ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 27*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne i64 [[TMP1]], 0 28*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext i1 [[_MSCZ_BS]] to i64 2967ad31c8SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call i64 @llvm.ctlz.i64(i64 [[V:%.*]], i1 false) 30*31bfa4a6SKevin Athey; CHECK-NEXT: store i64 [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 3167ad31c8SKevin Athey; CHECK-NEXT: ret i64 [[RES]] 3267ad31c8SKevin Athey; 3367ad31c8SKevin Athey %res = call i64 @llvm.ctlz.i64(i64 %v, i1 false) ; <<i64>> [#uses=1] 3467ad31c8SKevin Athey ret i64 %res 3567ad31c8SKevin Athey} 3667ad31c8SKevin Athey 3767ad31c8SKevin Atheydeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readnone 3867ad31c8SKevin Atheydefine <2 x i64> @test_ctlz_v2i64_zeropoison(<2 x i64> %v) #0 { 3967ad31c8SKevin Athey; CHECK-LABEL: @test_ctlz_v2i64_zeropoison( 4067ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8 4167ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 42*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer 43*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BZP:%.*]] = icmp eq <2 x i64> [[V:%.*]], zeroinitializer 44*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS1:%.*]] = or <2 x i1> [[_MSCZ_BS]], [[_MSCZ_BZP]] 45*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext <2 x i1> [[_MSCZ_BS1]] to <2 x i64> 46*31bfa4a6SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> [[V]], i1 true) 47*31bfa4a6SKevin Athey; CHECK-NEXT: store <2 x i64> [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 4867ad31c8SKevin Athey; CHECK-NEXT: ret <2 x i64> [[RES]] 4967ad31c8SKevin Athey; 5067ad31c8SKevin Athey %res = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %v, i1 true) ; <<2 x i64>> [#uses=1] 5167ad31c8SKevin Athey ret <2 x i64> %res 5267ad31c8SKevin Athey} 5367ad31c8SKevin Atheydefine <2 x i64> @test_ctlz_v2i64_nozeropoison(<2 x i64> %v) #0 { 5467ad31c8SKevin Athey; CHECK-LABEL: @test_ctlz_v2i64_nozeropoison( 5567ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8 5667ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 57*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer 58*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext <2 x i1> [[_MSCZ_BS]] to <2 x i64> 5967ad31c8SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> [[V:%.*]], i1 false) 60*31bfa4a6SKevin Athey; CHECK-NEXT: store <2 x i64> [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 6167ad31c8SKevin Athey; CHECK-NEXT: ret <2 x i64> [[RES]] 6267ad31c8SKevin Athey; 6367ad31c8SKevin Athey %res = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %v, i1 false) ; <<2 x i64>> [#uses=1] 6467ad31c8SKevin Athey ret <2 x i64> %res 6567ad31c8SKevin Athey} 6667ad31c8SKevin Athey 6767ad31c8SKevin Atheydeclare i64 @llvm.cttz.i64(i64, i1) nounwind readnone 6867ad31c8SKevin Atheydefine i64 @test_cttz_i64_zeropoison(i64 %v) #0 { 6967ad31c8SKevin Athey; CHECK-LABEL: @test_cttz_i64_zeropoison( 7067ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8 7167ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 72*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne i64 [[TMP1]], 0 73*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BZP:%.*]] = icmp eq i64 [[V:%.*]], 0 74*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS1:%.*]] = or i1 [[_MSCZ_BS]], [[_MSCZ_BZP]] 75*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext i1 [[_MSCZ_BS1]] to i64 76*31bfa4a6SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call i64 @llvm.cttz.i64(i64 [[V]], i1 true) 77*31bfa4a6SKevin Athey; CHECK-NEXT: store i64 [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 7867ad31c8SKevin Athey; CHECK-NEXT: ret i64 [[RES]] 7967ad31c8SKevin Athey; 8067ad31c8SKevin Athey %res = call i64 @llvm.cttz.i64(i64 %v, i1 true) ; <<i64>> [#uses=1] 8167ad31c8SKevin Athey ret i64 %res 8267ad31c8SKevin Athey} 8367ad31c8SKevin Atheydefine i64 @test_cttz_i64_nozeropoison(i64 %v) #0 { 8467ad31c8SKevin Athey; CHECK-LABEL: @test_cttz_i64_nozeropoison( 8567ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8 8667ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 87*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne i64 [[TMP1]], 0 88*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext i1 [[_MSCZ_BS]] to i64 8967ad31c8SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call i64 @llvm.cttz.i64(i64 [[V:%.*]], i1 false) 90*31bfa4a6SKevin Athey; CHECK-NEXT: store i64 [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 9167ad31c8SKevin Athey; CHECK-NEXT: ret i64 [[RES]] 9267ad31c8SKevin Athey; 9367ad31c8SKevin Athey %res = call i64 @llvm.cttz.i64(i64 %v, i1 false) ; <<i64>> [#uses=1] 9467ad31c8SKevin Athey ret i64 %res 9567ad31c8SKevin Athey} 9667ad31c8SKevin Athey 9767ad31c8SKevin Atheydeclare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1) nounwind readnone 9867ad31c8SKevin Atheydefine <2 x i64> @test_cttz_v2i64_zeropoison(<2 x i64> %v) #0 { 9967ad31c8SKevin Athey; CHECK-LABEL: @test_cttz_v2i64_zeropoison( 10067ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8 10167ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 102*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer 103*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BZP:%.*]] = icmp eq <2 x i64> [[V:%.*]], zeroinitializer 104*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS1:%.*]] = or <2 x i1> [[_MSCZ_BS]], [[_MSCZ_BZP]] 105*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext <2 x i1> [[_MSCZ_BS1]] to <2 x i64> 106*31bfa4a6SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> [[V]], i1 true) 107*31bfa4a6SKevin Athey; CHECK-NEXT: store <2 x i64> [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 10867ad31c8SKevin Athey; CHECK-NEXT: ret <2 x i64> [[RES]] 10967ad31c8SKevin Athey; 11067ad31c8SKevin Athey %res = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %v, i1 true) ; <<2 x i64>> [#uses=1] 11167ad31c8SKevin Athey ret <2 x i64> %res 11267ad31c8SKevin Athey} 11367ad31c8SKevin Atheydefine <2 x i64> @test_cttz_v2i64_nozeropoison(<2 x i64> %v) #0 { 11467ad31c8SKevin Athey; CHECK-LABEL: @test_cttz_v2i64_nozeropoison( 11567ad31c8SKevin Athey; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8 11667ad31c8SKevin Athey; CHECK-NEXT: call void @llvm.donothing() 117*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_BS:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer 118*31bfa4a6SKevin Athey; CHECK-NEXT: [[_MSCZ_OS:%.*]] = sext <2 x i1> [[_MSCZ_BS]] to <2 x i64> 11967ad31c8SKevin Athey; CHECK-NEXT: [[RES:%.*]] = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> [[V:%.*]], i1 false) 120*31bfa4a6SKevin Athey; CHECK-NEXT: store <2 x i64> [[_MSCZ_OS]], ptr @__msan_retval_tls, align 8 12167ad31c8SKevin Athey; CHECK-NEXT: ret <2 x i64> [[RES]] 12267ad31c8SKevin Athey; 12367ad31c8SKevin Athey %res = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %v, i1 false) ; <<2 x i64>> [#uses=1] 12467ad31c8SKevin Athey ret <2 x i64> %res 12567ad31c8SKevin Athey} 12667ad31c8SKevin Athey 12767ad31c8SKevin Athey 12867ad31c8SKevin Atheyattributes #0 = { sanitize_memory } 129