diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 48b190aa5a0191ca6dfcd7dbbcbee7bc8fc91fa2..7fe99e253002cdc34411bf83aeb4b3d0efc241ea 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -13,7 +13,7 @@ local_size = (1, 1, 1)
 0:21      all ( temp bool)
 0:21        Convert float to bool ( temp bool)
 0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp void)
+0:24      AtomicAdd ( temp uint)
 0:24        'gs_ua' ( shared uint)
 0:24        'gs_ub' ( shared uint)
 0:25      move second child to first child ( temp uint)
@@ -21,7 +21,7 @@ local_size = (1, 1, 1)
 0:25        AtomicAdd ( temp uint)
 0:25          'gs_ua' ( shared uint)
 0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp void)
+0:26      AtomicAnd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
@@ -40,7 +40,7 @@ local_size = (1, 1, 1)
 0:29        AtomicExchange ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp void)
+0:30      AtomicMax ( temp uint)
 0:30        'gs_ua' ( shared uint)
 0:30        'gs_ub' ( shared uint)
 0:31      move second child to first child ( temp uint)
@@ -48,7 +48,7 @@ local_size = (1, 1, 1)
 0:31        AtomicMax ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp void)
+0:32      AtomicMin ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
@@ -56,7 +56,7 @@ local_size = (1, 1, 1)
 0:33        AtomicMin ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp void)
+0:34      AtomicOr ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
@@ -64,7 +64,7 @@ local_size = (1, 1, 1)
 0:35        AtomicOr ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp void)
+0:36      AtomicXor ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
@@ -95,7 +95,7 @@ local_size = (1, 1, 1)
 0:55      all ( temp bool)
 0:55        Convert float to bool ( temp 2-component vector of bool)
 0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp void)
+0:58      AtomicAdd ( temp 2-component vector of uint)
 0:58        'gs_ua2' ( shared 2-component vector of uint)
 0:58        'gs_ub2' ( shared 2-component vector of uint)
 0:59      move second child to first child ( temp 2-component vector of uint)
@@ -103,7 +103,7 @@ local_size = (1, 1, 1)
 0:59        AtomicAdd ( temp 2-component vector of uint)
 0:59          'gs_ua2' ( shared 2-component vector of uint)
 0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp void)
+0:60      AtomicAnd ( temp 2-component vector of uint)
 0:60        'gs_ua2' ( shared 2-component vector of uint)
 0:60        'gs_ub2' ( shared 2-component vector of uint)
 0:61      move second child to first child ( temp 2-component vector of uint)
@@ -122,7 +122,7 @@ local_size = (1, 1, 1)
 0:63        AtomicExchange ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp void)
+0:64      AtomicMax ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
@@ -130,7 +130,7 @@ local_size = (1, 1, 1)
 0:65        AtomicMax ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp void)
+0:66      AtomicMin ( temp 2-component vector of uint)
 0:66        'gs_ua2' ( shared 2-component vector of uint)
 0:66        'gs_ub2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
@@ -138,7 +138,7 @@ local_size = (1, 1, 1)
 0:67        AtomicMin ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp void)
+0:68      AtomicOr ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
@@ -146,7 +146,7 @@ local_size = (1, 1, 1)
 0:69        AtomicOr ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp void)
+0:70      AtomicXor ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
@@ -169,7 +169,7 @@ local_size = (1, 1, 1)
 0:82      all ( temp bool)
 0:82        Convert float to bool ( temp 3-component vector of bool)
 0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp void)
+0:85      AtomicAdd ( temp 3-component vector of uint)
 0:85        'gs_ua3' ( shared 3-component vector of uint)
 0:85        'gs_ub3' ( shared 3-component vector of uint)
 0:86      move second child to first child ( temp 3-component vector of uint)
@@ -177,7 +177,7 @@ local_size = (1, 1, 1)
 0:86        AtomicAdd ( temp 3-component vector of uint)
 0:86          'gs_ua3' ( shared 3-component vector of uint)
 0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp void)
+0:87      AtomicAnd ( temp 3-component vector of uint)
 0:87        'gs_ua3' ( shared 3-component vector of uint)
 0:87        'gs_ub3' ( shared 3-component vector of uint)
 0:88      move second child to first child ( temp 3-component vector of uint)
@@ -196,7 +196,7 @@ local_size = (1, 1, 1)
 0:90        AtomicExchange ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp void)
+0:91      AtomicMax ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
@@ -204,7 +204,7 @@ local_size = (1, 1, 1)
 0:92        AtomicMax ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp void)
+0:93      AtomicMin ( temp 3-component vector of uint)
 0:93        'gs_ua3' ( shared 3-component vector of uint)
 0:93        'gs_ub3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
@@ -212,7 +212,7 @@ local_size = (1, 1, 1)
 0:94        AtomicMin ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp void)
+0:95      AtomicOr ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
@@ -220,7 +220,7 @@ local_size = (1, 1, 1)
 0:96        AtomicOr ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp void)
+0:97      AtomicXor ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
@@ -244,7 +244,7 @@ local_size = (1, 1, 1)
 0:109      all ( temp bool)
 0:109        Convert float to bool ( temp 4-component vector of bool)
 0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp void)
+0:112      AtomicAdd ( temp 4-component vector of uint)
 0:112        'gs_ua4' ( shared 4-component vector of uint)
 0:112        'gs_ub4' ( shared 4-component vector of uint)
 0:113      move second child to first child ( temp 4-component vector of uint)
@@ -252,7 +252,7 @@ local_size = (1, 1, 1)
 0:113        AtomicAdd ( temp 4-component vector of uint)
 0:113          'gs_ua4' ( shared 4-component vector of uint)
 0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp void)
+0:114      AtomicAnd ( temp 4-component vector of uint)
 0:114        'gs_ua4' ( shared 4-component vector of uint)
 0:114        'gs_ub4' ( shared 4-component vector of uint)
 0:115      move second child to first child ( temp 4-component vector of uint)
@@ -271,7 +271,7 @@ local_size = (1, 1, 1)
 0:117        AtomicExchange ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp void)
+0:118      AtomicMax ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
@@ -279,7 +279,7 @@ local_size = (1, 1, 1)
 0:119        AtomicMax ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp void)
+0:120      AtomicMin ( temp 4-component vector of uint)
 0:120        'gs_ua4' ( shared 4-component vector of uint)
 0:120        'gs_ub4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
@@ -287,7 +287,7 @@ local_size = (1, 1, 1)
 0:121        AtomicMin ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp void)
+0:122      AtomicOr ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
@@ -295,7 +295,7 @@ local_size = (1, 1, 1)
 0:123        AtomicOr ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp void)
+0:124      AtomicXor ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
@@ -373,7 +373,7 @@ local_size = (1, 1, 1)
 0:21      all ( temp bool)
 0:21        Convert float to bool ( temp bool)
 0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp void)
+0:24      AtomicAdd ( temp uint)
 0:24        'gs_ua' ( shared uint)
 0:24        'gs_ub' ( shared uint)
 0:25      move second child to first child ( temp uint)
@@ -381,7 +381,7 @@ local_size = (1, 1, 1)
 0:25        AtomicAdd ( temp uint)
 0:25          'gs_ua' ( shared uint)
 0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp void)
+0:26      AtomicAnd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
@@ -400,7 +400,7 @@ local_size = (1, 1, 1)
 0:29        AtomicExchange ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp void)
+0:30      AtomicMax ( temp uint)
 0:30        'gs_ua' ( shared uint)
 0:30        'gs_ub' ( shared uint)
 0:31      move second child to first child ( temp uint)
@@ -408,7 +408,7 @@ local_size = (1, 1, 1)
 0:31        AtomicMax ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp void)
+0:32      AtomicMin ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
@@ -416,7 +416,7 @@ local_size = (1, 1, 1)
 0:33        AtomicMin ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp void)
+0:34      AtomicOr ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
@@ -424,7 +424,7 @@ local_size = (1, 1, 1)
 0:35        AtomicOr ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp void)
+0:36      AtomicXor ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
@@ -455,7 +455,7 @@ local_size = (1, 1, 1)
 0:55      all ( temp bool)
 0:55        Convert float to bool ( temp 2-component vector of bool)
 0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp void)
+0:58      AtomicAdd ( temp 2-component vector of uint)
 0:58        'gs_ua2' ( shared 2-component vector of uint)
 0:58        'gs_ub2' ( shared 2-component vector of uint)
 0:59      move second child to first child ( temp 2-component vector of uint)
@@ -463,7 +463,7 @@ local_size = (1, 1, 1)
 0:59        AtomicAdd ( temp 2-component vector of uint)
 0:59          'gs_ua2' ( shared 2-component vector of uint)
 0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp void)
+0:60      AtomicAnd ( temp 2-component vector of uint)
 0:60        'gs_ua2' ( shared 2-component vector of uint)
 0:60        'gs_ub2' ( shared 2-component vector of uint)
 0:61      move second child to first child ( temp 2-component vector of uint)
@@ -482,7 +482,7 @@ local_size = (1, 1, 1)
 0:63        AtomicExchange ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp void)
+0:64      AtomicMax ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
@@ -490,7 +490,7 @@ local_size = (1, 1, 1)
 0:65        AtomicMax ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp void)
+0:66      AtomicMin ( temp 2-component vector of uint)
 0:66        'gs_ua2' ( shared 2-component vector of uint)
 0:66        'gs_ub2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
@@ -498,7 +498,7 @@ local_size = (1, 1, 1)
 0:67        AtomicMin ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp void)
+0:68      AtomicOr ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
@@ -506,7 +506,7 @@ local_size = (1, 1, 1)
 0:69        AtomicOr ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp void)
+0:70      AtomicXor ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
@@ -529,7 +529,7 @@ local_size = (1, 1, 1)
 0:82      all ( temp bool)
 0:82        Convert float to bool ( temp 3-component vector of bool)
 0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp void)
+0:85      AtomicAdd ( temp 3-component vector of uint)
 0:85        'gs_ua3' ( shared 3-component vector of uint)
 0:85        'gs_ub3' ( shared 3-component vector of uint)
 0:86      move second child to first child ( temp 3-component vector of uint)
@@ -537,7 +537,7 @@ local_size = (1, 1, 1)
 0:86        AtomicAdd ( temp 3-component vector of uint)
 0:86          'gs_ua3' ( shared 3-component vector of uint)
 0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp void)
+0:87      AtomicAnd ( temp 3-component vector of uint)
 0:87        'gs_ua3' ( shared 3-component vector of uint)
 0:87        'gs_ub3' ( shared 3-component vector of uint)
 0:88      move second child to first child ( temp 3-component vector of uint)
@@ -556,7 +556,7 @@ local_size = (1, 1, 1)
 0:90        AtomicExchange ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp void)
+0:91      AtomicMax ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
@@ -564,7 +564,7 @@ local_size = (1, 1, 1)
 0:92        AtomicMax ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp void)
+0:93      AtomicMin ( temp 3-component vector of uint)
 0:93        'gs_ua3' ( shared 3-component vector of uint)
 0:93        'gs_ub3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
@@ -572,7 +572,7 @@ local_size = (1, 1, 1)
 0:94        AtomicMin ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp void)
+0:95      AtomicOr ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
@@ -580,7 +580,7 @@ local_size = (1, 1, 1)
 0:96        AtomicOr ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp void)
+0:97      AtomicXor ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
@@ -604,7 +604,7 @@ local_size = (1, 1, 1)
 0:109      all ( temp bool)
 0:109        Convert float to bool ( temp 4-component vector of bool)
 0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp void)
+0:112      AtomicAdd ( temp 4-component vector of uint)
 0:112        'gs_ua4' ( shared 4-component vector of uint)
 0:112        'gs_ub4' ( shared 4-component vector of uint)
 0:113      move second child to first child ( temp 4-component vector of uint)
@@ -612,7 +612,7 @@ local_size = (1, 1, 1)
 0:113        AtomicAdd ( temp 4-component vector of uint)
 0:113          'gs_ua4' ( shared 4-component vector of uint)
 0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp void)
+0:114      AtomicAnd ( temp 4-component vector of uint)
 0:114        'gs_ua4' ( shared 4-component vector of uint)
 0:114        'gs_ub4' ( shared 4-component vector of uint)
 0:115      move second child to first child ( temp 4-component vector of uint)
@@ -631,7 +631,7 @@ local_size = (1, 1, 1)
 0:117        AtomicExchange ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp void)
+0:118      AtomicMax ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
@@ -639,7 +639,7 @@ local_size = (1, 1, 1)
 0:119        AtomicMax ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp void)
+0:120      AtomicMin ( temp 4-component vector of uint)
 0:120        'gs_ua4' ( shared 4-component vector of uint)
 0:120        'gs_ub4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
@@ -647,7 +647,7 @@ local_size = (1, 1, 1)
 0:121        AtomicMin ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp void)
+0:122      AtomicOr ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
@@ -655,7 +655,7 @@ local_size = (1, 1, 1)
 0:123        AtomicOr ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp void)
+0:124      AtomicXor ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
@@ -905,12 +905,12 @@ local_size = (1, 1, 1)
               63:    61(bool) FOrdNotEqual 60 62
               64:    61(bool) All 63
               68:      8(int) Load 67(gs_ub)
-              71:           2 AtomicIAdd 66(gs_ua) 69 70 68
+              71:      8(int) AtomicIAdd 66(gs_ua) 69 70 68
               73:      8(int) Load 67(gs_ub)
               74:      8(int) AtomicIAdd 66(gs_ua) 69 70 73
                               Store 72(out_u1) 74
               75:      8(int) Load 67(gs_ub)
-              76:           2 AtomicAnd 66(gs_ua) 69 70 75
+              76:      8(int) AtomicAnd 66(gs_ua) 69 70 75
               77:      8(int) Load 67(gs_ub)
               78:      8(int) AtomicAnd 66(gs_ua) 69 70 77
                               Store 72(out_u1) 78
@@ -922,22 +922,22 @@ local_size = (1, 1, 1)
               84:      8(int) AtomicExchange 66(gs_ua) 69 70 83
                               Store 72(out_u1) 84
               85:      8(int) Load 67(gs_ub)
-              86:           2 AtomicSMax 66(gs_ua) 69 70 85
+              86:      8(int) AtomicUMax 66(gs_ua) 69 70 85
               87:      8(int) Load 67(gs_ub)
               88:      8(int) AtomicUMax 66(gs_ua) 69 70 87
                               Store 72(out_u1) 88
               89:      8(int) Load 67(gs_ub)
-              90:           2 AtomicSMin 66(gs_ua) 69 70 89
+              90:      8(int) AtomicUMin 66(gs_ua) 69 70 89
               91:      8(int) Load 67(gs_ub)
               92:      8(int) AtomicUMin 66(gs_ua) 69 70 91
                               Store 72(out_u1) 92
               93:      8(int) Load 67(gs_ub)
-              94:           2 AtomicOr 66(gs_ua) 69 70 93
+              94:      8(int) AtomicOr 66(gs_ua) 69 70 93
               95:      8(int) Load 67(gs_ub)
               96:      8(int) AtomicOr 66(gs_ua) 69 70 95
                               Store 72(out_u1) 96
               97:      8(int) Load 67(gs_ub)
-              98:           2 AtomicXor 66(gs_ua) 69 70 97
+              98:      8(int) AtomicXor 66(gs_ua) 69 70 97
               99:      8(int) Load 67(gs_ub)
              100:      8(int) AtomicXor 66(gs_ua) 69 70 99
                               Store 72(out_u1) 100
@@ -962,12 +962,12 @@ local_size = (1, 1, 1)
              108:  106(bvec2) FOrdNotEqual 105 107
              109:    61(bool) All 108
              113:   26(ivec2) Load 112(gs_ub2)
-             114:           2 AtomicIAdd 111(gs_ua2) 69 70 113
+             114:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 113
              116:   26(ivec2) Load 112(gs_ub2)
              117:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 116
                               Store 115(out_u2) 117
              118:   26(ivec2) Load 112(gs_ub2)
-             119:           2 AtomicAnd 111(gs_ua2) 69 70 118
+             119:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 118
              120:   26(ivec2) Load 112(gs_ub2)
              121:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 120
                               Store 115(out_u2) 121
@@ -979,22 +979,22 @@ local_size = (1, 1, 1)
              127:   26(ivec2) AtomicExchange 111(gs_ua2) 69 70 126
                               Store 115(out_u2) 127
              128:   26(ivec2) Load 112(gs_ub2)
-             129:           2 AtomicSMax 111(gs_ua2) 69 70 128
+             129:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 128
              130:   26(ivec2) Load 112(gs_ub2)
              131:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 130
                               Store 115(out_u2) 131
              132:   26(ivec2) Load 112(gs_ub2)
-             133:           2 AtomicSMin 111(gs_ua2) 69 70 132
+             133:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 132
              134:   26(ivec2) Load 112(gs_ub2)
              135:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 134
                               Store 115(out_u2) 135
              136:   26(ivec2) Load 112(gs_ub2)
-             137:           2 AtomicOr 111(gs_ua2) 69 70 136
+             137:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 136
              138:   26(ivec2) Load 112(gs_ub2)
              139:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 138
                               Store 115(out_u2) 139
              140:   26(ivec2) Load 112(gs_ub2)
-             141:           2 AtomicXor 111(gs_ua2) 69 70 140
+             141:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 140
              142:   26(ivec2) Load 112(gs_ub2)
              143:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 142
                               Store 115(out_u2) 143
@@ -1012,12 +1012,12 @@ local_size = (1, 1, 1)
              152:  150(bvec3) FOrdNotEqual 149 151
              153:    61(bool) All 152
              157:   38(ivec3) Load 156(gs_ub3)
-             158:           2 AtomicIAdd 155(gs_ua3) 69 70 157
+             158:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 157
              160:   38(ivec3) Load 156(gs_ub3)
              161:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 160
                               Store 159(out_u3) 161
              162:   38(ivec3) Load 156(gs_ub3)
-             163:           2 AtomicAnd 155(gs_ua3) 69 70 162
+             163:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 162
              164:   38(ivec3) Load 156(gs_ub3)
              165:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 164
                               Store 159(out_u3) 165
@@ -1029,22 +1029,22 @@ local_size = (1, 1, 1)
              171:   38(ivec3) AtomicExchange 155(gs_ua3) 69 70 170
                               Store 159(out_u3) 171
              172:   38(ivec3) Load 156(gs_ub3)
-             173:           2 AtomicSMax 155(gs_ua3) 69 70 172
+             173:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 172
              174:   38(ivec3) Load 156(gs_ub3)
              175:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 174
                               Store 159(out_u3) 175
              176:   38(ivec3) Load 156(gs_ub3)
-             177:           2 AtomicSMin 155(gs_ua3) 69 70 176
+             177:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 176
              178:   38(ivec3) Load 156(gs_ub3)
              179:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 178
                               Store 159(out_u3) 179
              180:   38(ivec3) Load 156(gs_ub3)
-             181:           2 AtomicOr 155(gs_ua3) 69 70 180
+             181:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 180
              182:   38(ivec3) Load 156(gs_ub3)
              183:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 182
                               Store 159(out_u3) 183
              184:   38(ivec3) Load 156(gs_ub3)
-             185:           2 AtomicXor 155(gs_ua3) 69 70 184
+             185:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 184
              186:   38(ivec3) Load 156(gs_ub3)
              187:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 186
                               Store 159(out_u3) 187
@@ -1062,12 +1062,12 @@ local_size = (1, 1, 1)
              195:  193(bvec4) FOrdNotEqual 192 194
              196:    61(bool) All 195
              200:   50(ivec4) Load 199(gs_ub4)
-             201:           2 AtomicIAdd 198(gs_ua4) 69 70 200
+             201:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 200
              203:   50(ivec4) Load 199(gs_ub4)
              204:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 203
                               Store 202(out_u4) 204
              205:   50(ivec4) Load 199(gs_ub4)
-             206:           2 AtomicAnd 198(gs_ua4) 69 70 205
+             206:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 205
              207:   50(ivec4) Load 199(gs_ub4)
              208:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 207
                               Store 202(out_u4) 208
@@ -1079,22 +1079,22 @@ local_size = (1, 1, 1)
              214:   50(ivec4) AtomicExchange 198(gs_ua4) 69 70 213
                               Store 202(out_u4) 214
              215:   50(ivec4) Load 199(gs_ub4)
-             216:           2 AtomicSMax 198(gs_ua4) 69 70 215
+             216:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 215
              217:   50(ivec4) Load 199(gs_ub4)
              218:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 217
                               Store 202(out_u4) 218
              219:   50(ivec4) Load 199(gs_ub4)
-             220:           2 AtomicSMin 198(gs_ua4) 69 70 219
+             220:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 219
              221:   50(ivec4) Load 199(gs_ub4)
              222:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 221
                               Store 202(out_u4) 222
              223:   50(ivec4) Load 199(gs_ub4)
-             224:           2 AtomicOr 198(gs_ua4) 69 70 223
+             224:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 223
              225:   50(ivec4) Load 199(gs_ub4)
              226:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 225
                               Store 202(out_u4) 226
              227:   50(ivec4) Load 199(gs_ub4)
-             228:           2 AtomicXor 198(gs_ua4) 69 70 227
+             228:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 227
              229:   50(ivec4) Load 199(gs_ub4)
              230:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 229
                               Store 202(out_u4) 230
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 977a0ebc9de89387e77c6361e2b83c37239813da..a03b4d800a74df15bfeb1bda6a1a31aa2db04bd8 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -6,7 +6,7 @@ gl_FragCoord origin is upper left
 0:5    Function Parameters: 
 0:5      'pos' ( in uint)
 0:?     Sequence
-0:8      AtomicAdd ( temp void)
+0:8      AtomicAdd ( temp uint)
 0:8        indirect index (layout( row_major std430) buffer uint)
 0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 0:9                2 (const int)
 0:9          Constant:
 0:9            1 (const int)
-0:10      AtomicAnd ( temp void)
+0:10      AtomicAnd ( temp uint)
 0:10        indirect index (layout( row_major std430) buffer uint)
 0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 0:14                2 (const int)
 0:14          Constant:
 0:14            1 (const int)
-0:15      AtomicMax ( temp void)
+0:15      AtomicMax ( temp uint)
 0:15        indirect index (layout( row_major std430) buffer uint)
 0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -123,7 +123,7 @@ gl_FragCoord origin is upper left
 0:16                2 (const int)
 0:16          Constant:
 0:16            1 (const int)
-0:17      AtomicMin ( temp void)
+0:17      AtomicMin ( temp uint)
 0:17        indirect index (layout( row_major std430) buffer uint)
 0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -151,7 +151,7 @@ gl_FragCoord origin is upper left
 0:18                2 (const int)
 0:18          Constant:
 0:18            1 (const int)
-0:19      AtomicOr ( temp void)
+0:19      AtomicOr ( temp uint)
 0:19        indirect index (layout( row_major std430) buffer uint)
 0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -179,7 +179,7 @@ gl_FragCoord origin is upper left
 0:20                2 (const int)
 0:20          Constant:
 0:20            1 (const int)
-0:21      AtomicXor ( temp void)
+0:21      AtomicXor ( temp uint)
 0:21        indirect index (layout( row_major std430) buffer uint)
 0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -245,7 +245,7 @@ gl_FragCoord origin is upper left
 0:5    Function Parameters: 
 0:5      'pos' ( in uint)
 0:?     Sequence
-0:8      AtomicAdd ( temp void)
+0:8      AtomicAdd ( temp uint)
 0:8        indirect index (layout( row_major std430) buffer uint)
 0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -273,7 +273,7 @@ gl_FragCoord origin is upper left
 0:9                2 (const int)
 0:9          Constant:
 0:9            1 (const int)
-0:10      AtomicAnd ( temp void)
+0:10      AtomicAnd ( temp uint)
 0:10        indirect index (layout( row_major std430) buffer uint)
 0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -334,7 +334,7 @@ gl_FragCoord origin is upper left
 0:14                2 (const int)
 0:14          Constant:
 0:14            1 (const int)
-0:15      AtomicMax ( temp void)
+0:15      AtomicMax ( temp uint)
 0:15        indirect index (layout( row_major std430) buffer uint)
 0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -362,7 +362,7 @@ gl_FragCoord origin is upper left
 0:16                2 (const int)
 0:16          Constant:
 0:16            1 (const int)
-0:17      AtomicMin ( temp void)
+0:17      AtomicMin ( temp uint)
 0:17        indirect index (layout( row_major std430) buffer uint)
 0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -390,7 +390,7 @@ gl_FragCoord origin is upper left
 0:18                2 (const int)
 0:18          Constant:
 0:18            1 (const int)
-0:19      AtomicOr ( temp void)
+0:19      AtomicOr ( temp uint)
 0:19        indirect index (layout( row_major std430) buffer uint)
 0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -418,7 +418,7 @@ gl_FragCoord origin is upper left
 0:20                2 (const int)
 0:20          Constant:
 0:20            1 (const int)
-0:21      AtomicXor ( temp void)
+0:21      AtomicXor ( temp uint)
 0:21        indirect index (layout( row_major std430) buffer uint)
 0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
 0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
@@ -542,14 +542,14 @@ gl_FragCoord origin is upper left
            29(u):      7(ptr) Variable Function
               22:     18(int) ShiftRightArithmetic 20 21
               24:     23(ptr) AccessChain 17(sbuf) 19 22
-              28:           2 AtomicIAdd 24 26 27 25
+              28:      6(int) AtomicIAdd 24 26 27 25
               30:     18(int) ShiftRightArithmetic 20 21
               31:     23(ptr) AccessChain 17(sbuf) 19 30
               32:      6(int) AtomicIAdd 31 26 27 25
                               Store 29(u) 32
               33:     18(int) ShiftRightArithmetic 20 21
               34:     23(ptr) AccessChain 17(sbuf) 19 33
-              35:           2 AtomicAnd 34 26 27 25
+              35:      6(int) AtomicAnd 34 26 27 25
               36:     18(int) ShiftRightArithmetic 20 21
               37:     23(ptr) AccessChain 17(sbuf) 19 36
               38:      6(int) AtomicAnd 37 26 27 25
@@ -565,28 +565,28 @@ gl_FragCoord origin is upper left
                               Store 29(u) 45
               46:     18(int) ShiftRightArithmetic 20 21
               47:     23(ptr) AccessChain 17(sbuf) 19 46
-              48:           2 AtomicSMax 47 26 27 25
+              48:      6(int) AtomicUMax 47 26 27 25
               49:     18(int) ShiftRightArithmetic 20 21
               50:     23(ptr) AccessChain 17(sbuf) 19 49
               51:      6(int) AtomicUMax 50 26 27 25
                               Store 29(u) 51
               52:     18(int) ShiftRightArithmetic 20 21
               53:     23(ptr) AccessChain 17(sbuf) 19 52
-              54:           2 AtomicSMin 53 26 27 25
+              54:      6(int) AtomicUMin 53 26 27 25
               55:     18(int) ShiftRightArithmetic 20 21
               56:     23(ptr) AccessChain 17(sbuf) 19 55
               57:      6(int) AtomicUMin 56 26 27 25
                               Store 29(u) 57
               58:     18(int) ShiftRightArithmetic 20 21
               59:     23(ptr) AccessChain 17(sbuf) 19 58
-              60:           2 AtomicOr 59 26 27 25
+              60:      6(int) AtomicOr 59 26 27 25
               61:     18(int) ShiftRightArithmetic 20 21
               62:     23(ptr) AccessChain 17(sbuf) 19 61
               63:      6(int) AtomicOr 62 26 27 25
                               Store 29(u) 63
               64:     18(int) ShiftRightArithmetic 20 21
               65:     23(ptr) AccessChain 17(sbuf) 19 64
-              66:           2 AtomicXor 65 26 27 25
+              66:      6(int) AtomicXor 65 26 27 25
               67:     18(int) ShiftRightArithmetic 20 21
               68:     23(ptr) AccessChain 17(sbuf) 19 67
               69:      6(int) AtomicXor 68 26 27 25
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 4783687919f13127342bee693afc5ff5025e9a3c..8b4d67ab8efd87a219ae53e74fb6baa010d71f0c 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -4815,6 +4815,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
                 } else {
                     // Set the matching operator.  Since output is absent, this is all we need to do.
                     node->getAsAggregate()->setOperator(atomicOp);
+                    node->setType(atomic->getType());
                 }
             }