1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 > %t 2*9880d681SAndroid Build Coastguard Worker; RUN: not grep leaq %t 3*9880d681SAndroid Build Coastguard Worker; RUN: not grep incq %t 4*9880d681SAndroid Build Coastguard Worker; RUN: not grep decq %t 5*9880d681SAndroid Build Coastguard Worker; RUN: not grep negq %t 6*9880d681SAndroid Build Coastguard Worker; RUN: not grep addq %t 7*9880d681SAndroid Build Coastguard Worker; RUN: not grep subq %t 8*9880d681SAndroid Build Coastguard Worker; RUN: not grep "movl %" %t 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; Utilize implicit zero-extension on x86-64 to eliminate explicit 11*9880d681SAndroid Build Coastguard Worker; zero-extensions. Shrink 64-bit adds to 32-bit when the high 12*9880d681SAndroid Build Coastguard Worker; 32-bits will be zeroed. 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @bar(i64 %x, i64 %y, i64* %z) nounwind readnone { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %x, %y 17*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 18*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 19*9880d681SAndroid Build Coastguard Worker ret void 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Workerdefine void @easy(i32 %x, i32 %y, i64* %z) nounwind readnone { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker %t0 = add i32 %x, %y 24*9880d681SAndroid Build Coastguard Worker %tn = zext i32 %t0 to i64 25*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %tn, 4294967295 26*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 27*9880d681SAndroid Build Coastguard Worker ret void 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Workerdefine void @cola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %p = load i64, i64* %x 32*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %p, %y 33*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 34*9880d681SAndroid Build Coastguard Worker %t2 = xor i64 %t1, %u 35*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 36*9880d681SAndroid Build Coastguard Worker ret void 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Workerdefine void @yaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker %p = load i64, i64* %x 41*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %p, %y 42*9880d681SAndroid Build Coastguard Worker %t1 = xor i64 %t0, %u 43*9880d681SAndroid Build Coastguard Worker %t2 = and i64 %t1, 4294967295 44*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Workerdefine void @foo(i64 *%x, i64 *%y, i64* %z) nounwind readnone { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %a = load i64, i64* %x 50*9880d681SAndroid Build Coastguard Worker %b = load i64, i64* %y 51*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %a, %b 52*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 53*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 54*9880d681SAndroid Build Coastguard Worker ret void 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Workerdefine void @avo(i64 %x, i64* %z, i64 %u) nounwind readnone { 57*9880d681SAndroid Build Coastguard Workerentry: 58*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %x, 734847 59*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 60*9880d681SAndroid Build Coastguard Worker %t2 = xor i64 %t1, %u 61*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 62*9880d681SAndroid Build Coastguard Worker ret void 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Workerdefine void @phe(i64 %x, i64* %z, i64 %u) nounwind readnone { 65*9880d681SAndroid Build Coastguard Workerentry: 66*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %x, 734847 67*9880d681SAndroid Build Coastguard Worker %t1 = xor i64 %t0, %u 68*9880d681SAndroid Build Coastguard Worker %t2 = and i64 %t1, 4294967295 69*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 70*9880d681SAndroid Build Coastguard Worker ret void 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Workerdefine void @oze(i64 %y, i64* %z) nounwind readnone { 73*9880d681SAndroid Build Coastguard Workerentry: 74*9880d681SAndroid Build Coastguard Worker %t0 = add i64 %y, 1 75*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 76*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 77*9880d681SAndroid Build Coastguard Worker ret void 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine void @sbar(i64 %x, i64 %y, i64* %z) nounwind readnone { 81*9880d681SAndroid Build Coastguard Workerentry: 82*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 %x, %y 83*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 84*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 85*9880d681SAndroid Build Coastguard Worker ret void 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Workerdefine void @seasy(i32 %x, i32 %y, i64* %z) nounwind readnone { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker %t0 = sub i32 %x, %y 90*9880d681SAndroid Build Coastguard Worker %tn = zext i32 %t0 to i64 91*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %tn, 4294967295 92*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Workerdefine void @scola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone { 96*9880d681SAndroid Build Coastguard Workerentry: 97*9880d681SAndroid Build Coastguard Worker %p = load i64, i64* %x 98*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 %p, %y 99*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 100*9880d681SAndroid Build Coastguard Worker %t2 = xor i64 %t1, %u 101*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 102*9880d681SAndroid Build Coastguard Worker ret void 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Workerdefine void @syaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone { 105*9880d681SAndroid Build Coastguard Workerentry: 106*9880d681SAndroid Build Coastguard Worker %p = load i64, i64* %x 107*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 %p, %y 108*9880d681SAndroid Build Coastguard Worker %t1 = xor i64 %t0, %u 109*9880d681SAndroid Build Coastguard Worker %t2 = and i64 %t1, 4294967295 110*9880d681SAndroid Build Coastguard Worker store i64 %t2, i64* %z 111*9880d681SAndroid Build Coastguard Worker ret void 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Workerdefine void @sfoo(i64 *%x, i64 *%y, i64* %z) nounwind readnone { 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %a = load i64, i64* %x 116*9880d681SAndroid Build Coastguard Worker %b = load i64, i64* %y 117*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 %a, %b 118*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 119*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Workerdefine void @swya(i64 %y, i64* %z) nounwind readnone { 123*9880d681SAndroid Build Coastguard Workerentry: 124*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 0, %y 125*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 126*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 127*9880d681SAndroid Build Coastguard Worker ret void 128*9880d681SAndroid Build Coastguard Worker} 129*9880d681SAndroid Build Coastguard Workerdefine void @soze(i64 %y, i64* %z) nounwind readnone { 130*9880d681SAndroid Build Coastguard Workerentry: 131*9880d681SAndroid Build Coastguard Worker %t0 = sub i64 %y, 1 132*9880d681SAndroid Build Coastguard Worker %t1 = and i64 %t0, 4294967295 133*9880d681SAndroid Build Coastguard Worker store i64 %t1, i64* %z 134*9880d681SAndroid Build Coastguard Worker ret void 135*9880d681SAndroid Build Coastguard Worker} 136