diff --git a/qiskit/unroll/_dagunroller.py b/qiskit/unroll/_dagunroller.py
index <HASH>..<HASH> 100644
--- a/qiskit/unroll/_dagunroller.py
+++ b/qiskit/unroll/_dagunroller.py
@@ -78,11 +78,12 @@ class DagUnroller(object):
             gatedefs.append(Gate(children))
         # Walk through the DAG and examine each node
         builtins = ["U", "CX", "measure", "reset", "barrier"]
+        simulator_builtins = ['snapshot', 'save', 'load', 'noise']
         topological_sorted_list = list(nx.topological_sort(self.dag_circuit.multi_graph))
         for node in topological_sorted_list:
             current_node = self.dag_circuit.multi_graph.node[node]
             if current_node["type"] == "op" and \
-               current_node["name"] not in builtins + basis and \
+               current_node["name"] not in builtins + basis + simulator_builtins and \
                not self.dag_circuit.gates[current_node["name"]]["opaque"]:
                 subcircuit, wires = self._build_subcircuit(gatedefs,
                                                            basis,
Handle simulator builtins in dag unroller (#<I>)

This commit fixes an issue in the dag unroller when it encounters

simulator builtin instructions like snapshot(). It doesn't know what

those are so it assumes it's a gate. But since it's not a gate when it

tries to look that up it fails on a KeyError. This fixes that by having

a list of simulator builtins to check against and treats those like

other builtins (barrier, reset, etc).



Fixes #<I>