xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/abs-vector.ll (revision 41d5033eb162cb92b684855166cabfa3983b74c6)
11fd9a146SVitaly Buka; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2795d94fdSVitaly Buka; RUN: opt %s -S -msan-check-access-address=0 -passes=msan 2>&1 | FileCheck %s
3795d94fdSVitaly Buka; RUN: opt %s -S -msan-check-access-address=0 -msan-track-origins=2 -passes=msan 2>&1 | FileCheck %s --check-prefixes=CHECK,ORIGIN
41fd9a146SVitaly Buka
51fd9a146SVitaly Bukatarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
61fd9a146SVitaly Bukatarget triple = "x86_64-unknown-linux-gnu"
71fd9a146SVitaly Buka
8616c68aaSVitaly Bukadefine <4 x i64> @test_mm256_abs_epi8(<4 x i64> %a) local_unnamed_addr #0 {
91fd9a146SVitaly Buka; CHECK-LABEL: @test_mm256_abs_epi8(
101fd9a146SVitaly Buka; CHECK-NEXT:  entry:
11*41d5033eSNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
12*41d5033eSNikita Popov; ORIGIN-NEXT:   [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
134aa6abe4SVitaly Buka; CHECK:         call void @llvm.donothing()
144aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i64> [[TMP0]] to <32 x i8>
151fd9a146SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i64> [[A:%.*]] to <32 x i8>
164aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = tail call <32 x i8> @llvm.abs.v32i8(<32 x i8> [[TMP3]], i1 false)
174aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <32 x i8> [[TMP2]] to <4 x i64>
184aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <32 x i8> [[TMP4]] to <4 x i64>
19*41d5033eSNikita Popov; CHECK-NEXT:    store <4 x i64> [[TMP5]], ptr @__msan_retval_tls, align 8
20*41d5033eSNikita Popov; ORIGIN-NEXT:   store i32 [[TMP1]], ptr @__msan_retval_origin_tls, align 4
214aa6abe4SVitaly Buka; CHECK:         ret <4 x i64> [[TMP6]]
221fd9a146SVitaly Buka;
231fd9a146SVitaly Bukaentry:
241fd9a146SVitaly Buka  %0 = bitcast <4 x i64> %a to <32 x i8>
251fd9a146SVitaly Buka  %1 = tail call <32 x i8> @llvm.abs.v32i8(<32 x i8> %0, i1 false)
261fd9a146SVitaly Buka  %2 = bitcast <32 x i8> %1 to <4 x i64>
271fd9a146SVitaly Buka  ret <4 x i64> %2
281fd9a146SVitaly Buka}
291fd9a146SVitaly Buka
301fd9a146SVitaly Bukadefine <4 x i64> @test_mm256_abs_epi16(<4 x i64> %a) local_unnamed_addr #0 {
311fd9a146SVitaly Buka; CHECK-LABEL: @test_mm256_abs_epi16(
321fd9a146SVitaly Buka; CHECK-NEXT:  entry:
33*41d5033eSNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
34*41d5033eSNikita Popov; ORIGIN-NEXT:   [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
354aa6abe4SVitaly Buka; CHECK:         call void @llvm.donothing()
364aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i64> [[TMP0]] to <16 x i16>
371fd9a146SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i64> [[A:%.*]] to <16 x i16>
384aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = tail call <16 x i16> @llvm.abs.v16i16(<16 x i16> [[TMP3]], i1 false)
394aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <16 x i16> [[TMP2]] to <4 x i64>
404aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <16 x i16> [[TMP4]] to <4 x i64>
41*41d5033eSNikita Popov; CHECK-NEXT:    store <4 x i64> [[TMP5]], ptr @__msan_retval_tls, align 8
42*41d5033eSNikita Popov; ORIGIN-NEXT:   store i32 [[TMP1]], ptr @__msan_retval_origin_tls, align 4
434aa6abe4SVitaly Buka; CHECK:         ret <4 x i64> [[TMP6]]
441fd9a146SVitaly Buka;
451fd9a146SVitaly Bukaentry:
461fd9a146SVitaly Buka  %0 = bitcast <4 x i64> %a to <16 x i16>
471fd9a146SVitaly Buka  %1 = tail call <16 x i16> @llvm.abs.v16i16(<16 x i16> %0, i1 false)
481fd9a146SVitaly Buka  %2 = bitcast <16 x i16> %1 to <4 x i64>
491fd9a146SVitaly Buka  ret <4 x i64> %2
501fd9a146SVitaly Buka}
511fd9a146SVitaly Buka
521fd9a146SVitaly Bukadefine <4 x i64> @test_mm256_abs_epi32(<4 x i64> %a) local_unnamed_addr #0 {
531fd9a146SVitaly Buka; CHECK-LABEL: @test_mm256_abs_epi32(
541fd9a146SVitaly Buka; CHECK-NEXT:  entry:
55*41d5033eSNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
56*41d5033eSNikita Popov; ORIGIN-NEXT:   [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
574aa6abe4SVitaly Buka; CHECK:         call void @llvm.donothing()
584aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i64> [[TMP0]] to <8 x i32>
591fd9a146SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i64> [[A:%.*]] to <8 x i32>
604aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> [[TMP3]], i1 false)
614aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i32> [[TMP2]] to <4 x i64>
624aa6abe4SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i32> [[TMP4]] to <4 x i64>
63*41d5033eSNikita Popov; CHECK-NEXT:    store <4 x i64> [[TMP5]], ptr @__msan_retval_tls, align 8
64*41d5033eSNikita Popov; ORIGIN-NEXT:   store i32 [[TMP1]], ptr @__msan_retval_origin_tls, align 4
654aa6abe4SVitaly Buka; CHECK:         ret <4 x i64> [[TMP6]]
661fd9a146SVitaly Buka;
671fd9a146SVitaly Bukaentry:
681fd9a146SVitaly Buka  %0 = bitcast <4 x i64> %a to <8 x i32>
691fd9a146SVitaly Buka  %1 = tail call <8 x i32> @llvm.abs.v8i32(<8 x i32> %0, i1 false)
701fd9a146SVitaly Buka  %2 = bitcast <8 x i32> %1 to <4 x i64>
711fd9a146SVitaly Buka  ret <4 x i64> %2
721fd9a146SVitaly Buka}
731fd9a146SVitaly Buka
74795d94fdSVitaly Bukadefine <4 x double> @test_fabs(<4 x double> %a) local_unnamed_addr #0 {
75795d94fdSVitaly Buka; CHECK-LABEL: @test_fabs(
76795d94fdSVitaly Buka; CHECK-NEXT:  entry:
77*41d5033eSNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
78*41d5033eSNikita Popov; ORIGIN-NEXT:   [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
79795d94fdSVitaly Buka; CHECK:         call void @llvm.donothing()
80795d94fdSVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> [[A:%.*]])
81*41d5033eSNikita Popov; CHECK-NEXT:    store <4 x i64> [[TMP0]], ptr @__msan_retval_tls, align 8
82*41d5033eSNikita Popov; ORIGIN-NEXT:   store i32 [[TMP1]], ptr @__msan_retval_origin_tls, align 4
83795d94fdSVitaly Buka; CHECK:         ret <4 x double> [[TMP2]]
84795d94fdSVitaly Buka;
85795d94fdSVitaly Bukaentry:
86795d94fdSVitaly Buka  %0 = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %a)
87795d94fdSVitaly Buka  ret <4 x double> %0
88795d94fdSVitaly Buka}
89795d94fdSVitaly Buka
901fd9a146SVitaly Bukadeclare <32 x i8> @llvm.abs.v32i8(<32 x i8>, i1 immarg) #1
911fd9a146SVitaly Bukadeclare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1 immarg) #1
921fd9a146SVitaly Bukadeclare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1 immarg) #1
93795d94fdSVitaly Bukadeclare <4 x double> @llvm.fabs.v4f64(<4 x double>) #1
941fd9a146SVitaly Buka
951fd9a146SVitaly Bukaattributes #0 = { nounwind readnone sanitize_memory }
961fd9a146SVitaly Bukaattributes #1 = { nounwind readnone speculatable willreturn }
971fd9a146SVitaly Buka
981fd9a146SVitaly Buka!llvm.module.flags = !{!0}
991fd9a146SVitaly Buka!llvm.ident = !{!1}
1001fd9a146SVitaly Buka
1011fd9a146SVitaly Buka!0 = !{i32 1, !"wchar_size", i32 4}
1021fd9a146SVitaly Buka!1 = !{!"clang version 12.0.0"}
103