1 ; RUN: opt -instcombine -S < %s | FileCheck %s 2 3 declare <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptrs, i32, <2 x i1> %mask, <2 x double> %src0) 4 declare void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptrs, i32, <2 x i1> %mask) 5 declare <2 x double> @llvm.masked.gather.v2f64(<2 x double*> %ptrs, i32, <2 x i1> %mask, <2 x double> %passthru) 6 declare void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x double*> %ptrs, i32, <2 x i1> %mask) 7 8 define <2 x double> @load_zeromask(<2 x double>* %ptr, <2 x double> %passthru) { 9 %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 1, <2 x i1> zeroinitializer, <2 x double> %passthru) 10 ret <2 x double> %res 11 12 ; CHECK-LABEL: @load_zeromask( 13 ; CHECK-NEXT: ret <2 x double> %passthru 14 } 15 16 define <2 x double> @load_onemask(<2 x double>* %ptr, <2 x double> %passthru) { 17 %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 1>, <2 x double> %passthru) 18 ret <2 x double> %res 19 20 ; CHECK-LABEL: @load_onemask( 21 ; CHECK-NEXT: %unmaskedload = load <2 x double>, <2 x double>* %ptr, align 2 22 ; CHECK-NEXT: ret <2 x double> %unmaskedload 23 } 24 25 define <2 x double> @load_undefmask(<2 x double>* %ptr, <2 x double> %passthru) { 26 %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 undef>, <2 x double> %passthru) 27 ret <2 x double> %res 28 29 ; CHECK-LABEL: @load_undefmask( 30 ; CHECK-NEXT: %unmaskedload = load <2 x double>, <2 x double>* %ptr, align 2 31 ; CHECK-NEXT: ret <2 x double> %unmaskedload 32 } 33 34 define void @store_zeromask(<2 x double>* %ptr, <2 x double> %val) { 35 call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 3, <2 x i1> zeroinitializer) 36 ret void 37 38 ; CHECK-LABEL: @store_zeromask( 39 ; CHECK-NEXT: ret void 40 } 41 42 define void @store_onemask(<2 x double>* %ptr, <2 x double> %val) { 43 call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 4, <2 x i1> <i1 1, i1 1>) 44 ret void 45 46 ; CHECK-LABEL: @store_onemask( 47 ; CHECK-NEXT: store <2 x double> %val, <2 x double>* %ptr, align 4 48 ; CHECK-NEXT: ret void 49 } 50 51 define <2 x double> @gather_zeromask(<2 x double*> %ptrs, <2 x double> %passthru) { 52 %res = call <2 x double> @llvm.masked.gather.v2f64(<2 x double*> %ptrs, i32 5, <2 x i1> zeroinitializer, <2 x double> %passthru) 53 ret <2 x double> %res 54 55 ; CHECK-LABEL: @gather_zeromask( 56 ; CHECK-NEXT: ret <2 x double> %passthru 57 } 58 59 define void @scatter_zeromask(<2 x double*> %ptrs, <2 x double> %val) { 60 call void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x double*> %ptrs, i32 6, <2 x i1> zeroinitializer) 61 ret void 62 63 ; CHECK-LABEL: @scatter_zeromask( 64 ; CHECK-NEXT: ret void 65 } 66 67