changes with lines of spec counted
[cdsspec-compiler.git] / benchmark / cliffc-hashtable / cliffc_hashtable.h
index 3cef98003233fbbb5ceaa89da53d7b00139f0269..c09b7a1b3ea4aaef385465ad7513707d17695a5a 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <iostream>
 #include <atomic>
+#include "stdio.h" 
 //#include <common.h>
 #ifdef STANDALONE
 #include <assert.h>
@@ -106,11 +107,11 @@ class cliffc_hashtable {
                                map = new_spec_table_default(equals_key);
                                id_map = new_spec_table_default(equals_id);
                                tag = new_id_tag();
-
+                       //@Cleanup:
+                       //      model_print("cleaning up\n");
                        @DefineFunc:
                        bool equals_key(void *ptr1, void *ptr2) {
-                               TypeK *key1 = (TypeK*) ptr1,
-                                       *key2 = (TypeK*) ptr2;
+                               TypeK *key1 = (TypeK*) ptr1, *key2 = (TypeK*) ptr2;
                                if (key1 == NULL || key2 == NULL)
                                        return false;
                                return key1->equals(key2);
@@ -120,8 +121,7 @@ class cliffc_hashtable {
                        bool equals_val(void *ptr1, void *ptr2) {
                                if (ptr1 == ptr2)
                                        return true;
-                               TypeV *val1 = (TypeV*) ptr1,
-                                       *val2 = (TypeV*) ptr2;
+                               TypeV *val1 = (TypeV*) ptr1, *val2 = (TypeV*) ptr2;
                                if (val1 == NULL || val2 == NULL)
                                        return false;
                                return val1->equals(val2);
@@ -129,8 +129,7 @@ class cliffc_hashtable {
 
                        @DefineFunc:
                        bool equals_id(void *ptr1, void *ptr2) {
-                               id_tag_t *id1 = (id_tag_t*) ptr1,
-                                       *id2 = (id_tag_t*) ptr2;
+                               id_tag_t *id1 = (id_tag_t*) ptr1, *id2 = (id_tag_t*) ptr2;
                                if (id1 == NULL || id2 == NULL)
                                        return false;
                                return (*id1).tag == (*id2).tag;
@@ -413,19 +412,20 @@ friend class CHM;
        /**
                @Begin
                @Interface: Get
-               //@Commit_point_set: Get_Point1 | Get_Point2 | Get_Point3 | Get_ReadKVS
-               @Commit_point_set: Get_Point1 | Get_Point2 | Get_Point3
+               //@Commit_point_set: Get_Point1 | Get_Point2 | Get_ReadKVS | Get_ReadNewKVS | Get_Clear
+               @Commit_point_set: Get_Point1 | Get_Point2 | Get_Clear
+               //@Commit_point_set: Get_Point1 | Get_Point2 | Get_Point3
                @ID: getKeyTag(key)
                @Action:
                        TypeV *_Old_Val = (TypeV*) spec_table_get(map, key);
                        //bool passed = equals_val(_Old_Val, __RET__);
-                       bool passed = false;
-                       if (!passed) {
-                               int old = _Old_Val == NULL ? 0 : _Old_Val->_val;
-                               int ret = __RET__ == NULL ? 0 : __RET__->_val;
+                       //bool passed = false;
+                       //if (!passed) {
+                               //int old = _Old_Val == NULL ? 0 : _Old_Val->_val;
+                               //int ret = __RET__ == NULL ? 0 : __RET__->_val;
                                //model_print("Get: key: %d, _Old_Val: %d, RET: %d\n",
                                //key->_val, old, ret);
-                       }
+                       //}
                @Post_check:
                        //__RET__ == NULL ? true : equals_val(_Old_Val, __RET__)
                        equals_val(_Old_Val, __RET__)
@@ -451,20 +451,21 @@ friend class CHM;
        /**
                @Begin
                @Interface: Put
-               @Commit_point_set: Put_Point
+               //@Commit_point_set: Put_Point | Put_ReadKVS | Put_ReadNewKVS | Put_WriteKey
+               @Commit_point_set: Put_Point | Put_WriteKey
                @ID: getKeyTag(key)
                @Action:
                        # Remember this old value at checking point
                        TypeV *_Old_Val = (TypeV*) spec_table_get(map, key);
                        spec_table_put(map, key, val);
                        //bool passed = equals_val(__RET__, _Old_Val);
-                       bool passed = false;
-                       if (!passed) {
-                               int old = _Old_Val == NULL ? 0 : _Old_Val->_val;
-                               int ret = __RET__ == NULL ? 0 : __RET__->_val;
+                       //bool passed = false;
+                       //if (!passed) {
+                               //int old = _Old_Val == NULL ? 0 : _Old_Val->_val;
+                               //int ret = __RET__ == NULL ? 0 : __RET__->_val;
                                //model_print("Put: key: %d, val: %d, _Old_Val: %d, RET: %d\n",
                                //      key->_val, val->_val, old, ret);
-                       }
+                       //}
                @Post_check:
                        equals_val(__RET__, _Old_Val)
                @End
@@ -735,6 +736,13 @@ friend class CHM;
                        if (keyeq(K, key_slot, hashes, idx, fullhash)) {
                                // Key hit! Check if table-resize in progress
                                if (!is_prime(V)) {
+                                       /**
+                                               @Begin
+                                               @Commit_point_clear: true
+                                               @Label: Get_Clear
+                                               @End
+                                       */
+
                                        /**
                                                @Begin
                                                @Commit_point_define: true
@@ -756,9 +764,9 @@ friend class CHM;
                                /**** FIXME: miss ****/
                                kvs_data *newkvs = chm->_newkvs.load(memory_order_acquire);
                                /**
-                                       @Begin
-                                       @Commit_point_define_check: newkvs == NULL
-                                       @Label: Get_Point3
+                                       //@Begin
+                                       @Commit_point_define_check: true
+                                       @Label: Get_ReadNewKVS
                                        @End
                                */
                                return newkvs == NULL ? NULL : get_impl(topmap,
@@ -825,6 +833,13 @@ friend class CHM;
                                if (val_slot == TOMBSTONE) return val_slot;
                                // Claim the null key-slot
                                if (CAS_key(kvs, idx, NULL, key_slot)) {
+                                       /**
+                                               @Begin
+                                               @Commit_point_define: true
+                                               @Potential_commit_point_label: Write_Key_Point
+                                               @Label: Put_WriteKey
+                                               @End
+                                       */
                                        chm->_slots.fetch_add(1, memory_order_relaxed); // Inc key-slots-used count
                                        hashes[idx] = fullhash; // Memorize full hash
                                        break;
@@ -858,6 +873,12 @@ friend class CHM;
                // its progress (eagerly try to resize soon)
                /**** FIXME: miss ****/
                newkvs = chm->_newkvs.load(memory_order_acquire);
+               /**
+                       //@Begin
+                       @Commit_point_define_check: true
+                       @Label: Put_ReadNewKVS
+                       @End
+               */
                if (newkvs == NULL &&
                        ((V == NULL && chm->table_full(reprobe_cnt, len)) || is_prime(V))) {
                        //model_print("resize2\n");