xref: /llvm-project/llvm/test/Transforms/MergeFunc/shufflevector.ll (revision f38f99bd7671cee44c2a6a751fcab8685dbc3996)
160e9ee16SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*f38f99bdSRoman Lebedev; RUN: opt -S -passes=mergefunc < %s | FileCheck %s
360e9ee16SNikita Popov
460e9ee16SNikita Popovdefine internal <2 x i32> @test1(<2 x i32> %v1, <2 x i32> %v2) {
560e9ee16SNikita Popov; CHECK-LABEL: @test1(
660e9ee16SNikita Popov; CHECK-NEXT:    [[X:%.*]] = shufflevector <2 x i32> [[V1:%.*]], <2 x i32> [[V2:%.*]], <2 x i32> <i32 0, i32 1>
760e9ee16SNikita Popov; CHECK-NEXT:    ret <2 x i32> [[X]]
860e9ee16SNikita Popov;
960e9ee16SNikita Popov  %x = shufflevector <2 x i32> %v1, <2 x i32> %v2, <2 x i32> <i32 0, i32 1>
1060e9ee16SNikita Popov  ret <2 x i32> %x
1160e9ee16SNikita Popov}
1260e9ee16SNikita Popov
1360e9ee16SNikita Popov; Same mask as test1.
1460e9ee16SNikita Popovdefine internal <2 x i32> @test2(<2 x i32> %v1, <2 x i32> %v2) {
1560e9ee16SNikita Popov  %x = shufflevector <2 x i32> %v1, <2 x i32> %v2, <2 x i32> <i32 0, i32 1>
1660e9ee16SNikita Popov  ret <2 x i32> %x
1760e9ee16SNikita Popov}
1860e9ee16SNikita Popov
1960e9ee16SNikita Popov; Different mask than test1, don't merge.
2060e9ee16SNikita Popovdefine internal <2 x i32> @test3(<2 x i32> %v1, <2 x i32> %v2) {
2160e9ee16SNikita Popov; CHECK-LABEL: @test3(
2260e9ee16SNikita Popov; CHECK-NEXT:    [[X:%.*]] = shufflevector <2 x i32> [[V1:%.*]], <2 x i32> [[V2:%.*]], <2 x i32> <i32 1, i32 0>
2360e9ee16SNikita Popov; CHECK-NEXT:    ret <2 x i32> [[X]]
2460e9ee16SNikita Popov;
2560e9ee16SNikita Popov  %x = shufflevector <2 x i32> %v1, <2 x i32> %v2, <2 x i32> <i32 1, i32 0>
2660e9ee16SNikita Popov  ret <2 x i32> %x
2760e9ee16SNikita Popov}
2860e9ee16SNikita Popov
2960e9ee16SNikita Popovdefine void @caller(<2 x i32> %v1, <2 x i32> %v2) {
3060e9ee16SNikita Popov; CHECK-LABEL: @caller(
3160e9ee16SNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @test1(<2 x i32> [[V1:%.*]], <2 x i32> [[V2:%.*]])
3260e9ee16SNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x i32> @test1(<2 x i32> [[V1]], <2 x i32> [[V2]])
3360e9ee16SNikita Popov; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @test3(<2 x i32> [[V1]], <2 x i32> [[V2]])
3460e9ee16SNikita Popov; CHECK-NEXT:    ret void
3560e9ee16SNikita Popov;
3660e9ee16SNikita Popov  call <2 x i32> @test1(<2 x i32> %v1, <2 x i32> %v2)
3760e9ee16SNikita Popov  call <2 x i32> @test2(<2 x i32> %v1, <2 x i32> %v2)
3860e9ee16SNikita Popov  call <2 x i32> @test3(<2 x i32> %v1, <2 x i32> %v2)
3960e9ee16SNikita Popov  ret void
4060e9ee16SNikita Popov}
41