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