1*33224b22SAlex Crichton //! flags = ['-O2'] 2*33224b22SAlex Crichton 3*33224b22SAlex Crichton // clang-format off 4*33224b22SAlex Crichton // clang -o codegen-optimized.wasm -target wasm32-unknown-wasip1 -g -O2 codegen-optimized.cpp 5*33224b22SAlex Crichton 6*33224b22SAlex Crichton // Make sure to adjust the break locations in lldb.rs when modifying this test. 7*33224b22SAlex Crichton #define BREAKPOINT 8*33224b22SAlex Crichton #define NOINLINE __attribute__((noinline)) 9*33224b22SAlex Crichton NoInlineSideEffect()10*33224b22SAlex CrichtonNOINLINE int NoInlineSideEffect() { 11*33224b22SAlex Crichton volatile int x = 1; 12*33224b22SAlex Crichton return x; 13*33224b22SAlex Crichton } NoInlineSideEffect_TwoArgs(int a,int b)14*33224b22SAlex CrichtonNOINLINE int NoInlineSideEffect_TwoArgs(int a, int b) { 15*33224b22SAlex Crichton volatile int x[] = {1, 2, 3}; 16*33224b22SAlex Crichton return x[(a + b) >> 16]; 17*33224b22SAlex Crichton } 18*33224b22SAlex Crichton VariableRanges_SingleVRegBrokenUp(int b)19*33224b22SAlex CrichtonNOINLINE int VariableRanges_SingleVRegBrokenUp(int b) { 20*33224b22SAlex Crichton if (b < 0) { 21*33224b22SAlex Crichton __builtin_trap(); // This will split the live range of 'b'. 22*33224b22SAlex Crichton } 23*33224b22SAlex Crichton NoInlineSideEffect(); BREAKPOINT; 24*33224b22SAlex Crichton return b; 25*33224b22SAlex Crichton } 26*33224b22SAlex Crichton VariableRanges_SingleVRegRegReused(int b)27*33224b22SAlex CrichtonNOINLINE int VariableRanges_SingleVRegRegReused(int b) { 28*33224b22SAlex Crichton int t = b & 420; 29*33224b22SAlex Crichton NoInlineSideEffect_TwoArgs(t, b); BREAKPOINT; 30*33224b22SAlex Crichton return 0; 31*33224b22SAlex Crichton } 32*33224b22SAlex Crichton InitializeTest(volatile int * x)33*33224b22SAlex CrichtonNOINLINE void InitializeTest(volatile int *x) { 34*33224b22SAlex Crichton *x = 42; // Have something to set a breakpoint on. 35*33224b22SAlex Crichton } 36*33224b22SAlex Crichton main(int argc,char * argv[])37*33224b22SAlex Crichtonint main(int argc, char *argv[]) { 38*33224b22SAlex Crichton volatile int x; 39*33224b22SAlex Crichton InitializeTest(&x); 40*33224b22SAlex Crichton VariableRanges_SingleVRegBrokenUp(x++); 41*33224b22SAlex Crichton VariableRanges_SingleVRegRegReused(x++); 42*33224b22SAlex Crichton return 0; 43*33224b22SAlex Crichton } 44