On reperfusion of ischemic tissue, a prolonged phase of vasoconstriction occurs, the mechanism of which is poorly understood. However, it is known that peroxynitrite (ONOO−) is formed during reperfusion. In this study the contractile properties of ONOO− were investigated in Wistar rat middle cerebral arteries. The effects of ONOO− on vessel diameter were dose dependent. Low-dose ONOO− (10 μM) caused vessels to constrict by 15%. At an intermediate concentration of 25 μM, the effect of ONOO−was variable, whereas at the highest concentration (100 μM), vessels underwent persistent dilation and became insensitive to the endogenous vasoconstrictor 5-hydroxytryptamine. At the single cell level, ONOO− caused cerebral artery smooth muscle cells to contract. Reduced, but not oxidized, glutathione completely inhibited the contractile action of ONOO− on single cells. Vehicle and decomposed ONOO−each had minimal effect on cell length. These data show that ONOO− is a contractile agonist of middle cerebral arteries, at the single cell and whole vessel levels, suggesting that formation of ONOO− may contribute mechanistically to ischemic brain injury during stroke. Moreover, relatively high concentrations of ONOO− result in vascular paralysis.
No abstract
Many classical compiler optimizations can be elegantly expressed using rewrite rules of form: I ⇒ I ′ if φ , where I , I ′ are intermediate language instructions and φ is a property expressed in a temporal logic suitable for describing program data flow. Its reading: If the current program π contains an instruction of form I at some control point p , and if flow condition φ is satisfied at p , then replace I by I ′.The purpose of this paper is to show how such transformations may be proven correct. Our methodology is illustrated by three familiar optimizations, dead code elimination, constant folding and code motion. The meaning of correctness is that for any program π, if Rewrite (π, π′, p , I ⇒ I ′ if φ) then [[π]] = [[π′]], i.e. π and π′ have exactly the same semantics.
We present a method of specifying standard imperative program optimisations as a rewrite system. To achieve this we have extended the idea of matching sub-terms in expressions with simple patterns to matching blocks in a control flow graph. In order to express the complex restrictions on the applicability of these rewrites we add temporal logic side conditions. The combination of these features allows a flexible, high level, yet executable specification of many of the transformations found in optimising compilers.
Rewrite rules with side conditions can elegantly express many classical compiler optimizations for imperative programming languages. In this paper, programs are written in an intermediate language and transformation-enabling side conditions are specified in a temporal logic suitable for describing program data flow. The purpose of this paper is to show how such transformations may be proven correct. Our methodology is illustrated by three familiar optimizations: dead code elimination, constant folding, and code motion. A transformation is correct if whenever it can be applied to a program, the original and transformed programs are semantically equivalent, i.e., they compute the same input-output function. The proofs of semantic equivalence inductively show that a transformation-specific bisimulation relation holds between the original and transformed program computations.
Many classical compiler optimizations can be elegantly expressed using rewrite rules of form: I =⇒ I if φ, where I, I are intermediate language instructions and φ is a property expressed in a temporal logic suitable for describing program data flow. Its reading: If the current program π contains an instruction of form I at some control point p, and if flow condition φ is satisfied at p, then replace I by I .The purpose of this paper is to show how such transformations may be proven correct. Our methodology is illustrated by three familiar optimizations, dead code elimination, constant folding and code motion. The meaning of correctness is that for any program π, if Rewrite(π, π , p,I =⇒ I if φ) then [[π]] =[[π ]], i.e. π and π have exactly the same semantics. and π is the result of transforming it, a induction relation is established between the computations of π and π . A consequence is that if π has a terminating computation with "final answer" v, then π also has a terminating computation with the same final answer; and vice versa.
This paper describes an approach to program optimisation based on transformations, where temporal logic is used to specify side conditions, and strategies are created which expand the repertoire of transformations and provide a suitable level of abstraction. We demonstrate the power of this approach by developing a set of optimisations using our transformation language and showing how the transformations can be converted into a form which makes it easier to apply them, while maintaining trust in the resulting optimising steps. The approach is illustrated through a transformational case study where we apply several optimisations to a small program.
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.
hi@scite.ai
10624 S. Eastern Ave., Ste. A-614
Henderson, NV 89052, USA
Copyright © 2024 scite LLC. All rights reserved.
Made with 💙 for researchers
Part of the Research Solutions Family.