@@ -780,3 +780,46 @@ llvm.func @nvvm_mapa(%a: !llvm.ptr, %a_shared: !llvm.ptr<3>, %b : i32) {
780780 %1 = nvvm.mapa %a_shared , %b: !llvm.ptr <3 > -> !llvm.ptr <3 >
781781 llvm.return
782782}
783+
784+ // -----
785+ // CHECK-LABEL: @nvvm_redux_sync
786+ llvm.func @nvvm_redux_sync (%value: i32 , %offset: i32 ) {
787+ // CHECK: call i32 @llvm.nvvm.redux.sync.add(i32 %{{.*}}, i32 %{{.*}})
788+ %0 = nvvm.redux.sync add %value , %offset: i32 -> i32
789+ // CHECK: call i32 @llvm.nvvm.redux.sync.umax(i32 %{{.*}}, i32 %{{.*}})
790+ %1 = nvvm.redux.sync umax %value , %offset: i32 -> i32
791+ // CHECK: call i32 @llvm.nvvm.redux.sync.umin(i32 %{{.*}}, i32 %{{.*}})
792+ %2 = nvvm.redux.sync umin %value , %offset: i32 -> i32
793+ // CHECK: call i32 @llvm.nvvm.redux.sync.and(i32 %{{.*}}, i32 %{{.*}})
794+ %3 = nvvm.redux.sync and %value , %offset: i32 -> i32
795+ // CHECK: call i32 @llvm.nvvm.redux.sync.or(i32 %{{.*}}, i32 %{{.*}})
796+ %4 = nvvm.redux.sync or %value , %offset: i32 -> i32
797+ // CHECK: call i32 @llvm.nvvm.redux.sync.xor(i32 %{{.*}}, i32 %{{.*}})
798+ %5 = nvvm.redux.sync xor %value , %offset: i32 -> i32
799+ // CHECK: call i32 @llvm.nvvm.redux.sync.max(i32 %{{.*}}, i32 %{{.*}})
800+ %6 = nvvm.redux.sync max %value , %offset: i32 -> i32
801+ // CHECK: call i32 @llvm.nvvm.redux.sync.min(i32 %{{.*}}, i32 %{{.*}})
802+ %7 = nvvm.redux.sync min %value , %offset: i32 -> i32
803+ llvm.return
804+ }
805+
806+ // CHECK-LABEL: @nvvm_redux_sync_f32
807+ llvm.func @nvvm_redux_sync_f32 (%value: f32 , %offset: i32 ) {
808+ // CHECK: call float @llvm.nvvm.redux.sync.fmin(float %{{.*}}, i32 %{{.*}})
809+ %0 = nvvm.redux.sync fmin %value , %offset: f32 -> f32
810+ // CHECK: call float @llvm.nvvm.redux.sync.fmin.abs(float %{{.*}}, i32 %{{.*}})
811+ %1 = nvvm.redux.sync fmin %value , %offset {abs = true }: f32 -> f32
812+ // CHECK: call float @llvm.nvvm.redux.sync.fmin.NaN(float %{{.*}}, i32 %{{.*}})
813+ %2 = nvvm.redux.sync fmin %value , %offset {nan = true }: f32 -> f32
814+ // CHECK: call float @llvm.nvvm.redux.sync.fmin.abs.NaN(float %{{.*}}, i32 %{{.*}})
815+ %3 = nvvm.redux.sync fmin %value , %offset {abs = true , nan = true }: f32 -> f32
816+ // CHECK: call float @llvm.nvvm.redux.sync.fmax(float %{{.*}}, i32 %{{.*}})
817+ %4 = nvvm.redux.sync fmax %value , %offset: f32 -> f32
818+ // CHECK: call float @llvm.nvvm.redux.sync.fmax.abs(float %{{.*}}, i32 %{{.*}})
819+ %5 = nvvm.redux.sync fmax %value , %offset {abs = true }: f32 -> f32
820+ // CHECK: call float @llvm.nvvm.redux.sync.fmax.NaN(float %{{.*}}, i32 %{{.*}})
821+ %6 = nvvm.redux.sync fmax %value , %offset {nan = true }: f32 -> f32
822+ // CHECK: call float @llvm.nvvm.redux.sync.fmax.abs.NaN(float %{{.*}}, i32 %{{.*}})
823+ %7 = nvvm.redux.sync fmax %value , %offset {abs = true , nan = true }: f32 -> f32
824+ llvm.return
825+ }
0 commit comments