100624415SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*8ebb3eacSBjorn Pettersson; RUN: opt < %s -passes=sccp -S | FileCheck %s 300624415SFlorian Hahn 400624415SFlorian Hahn; Test some XOR simplifications / range propagation. 500624415SFlorian Hahndefine void@xor1(i1 %cmp) { 600624415SFlorian Hahn; CHECK-LABEL: @xor1( 700624415SFlorian Hahn; CHECK-NEXT: entry: 800624415SFlorian Hahn; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]] 900624415SFlorian Hahn; CHECK: if.true: 1000624415SFlorian Hahn; CHECK-NEXT: br label [[END]] 1100624415SFlorian Hahn; CHECK: end: 1200624415SFlorian Hahn; CHECK-NEXT: call void @use(i1 true) 1300624415SFlorian Hahn; CHECK-NEXT: call void @use(i1 false) 1400624415SFlorian Hahn; CHECK-NEXT: call void @use(i1 false) 1500624415SFlorian Hahn; CHECK-NEXT: call void @use(i1 true) 1600624415SFlorian Hahn; CHECK-NEXT: ret void 1700624415SFlorian Hahn; 1800624415SFlorian Hahnentry: 1900624415SFlorian Hahn br i1 %cmp, label %if.true, label %end 2000624415SFlorian Hahn 2100624415SFlorian Hahnif.true: 2200624415SFlorian Hahn br label %end 2300624415SFlorian Hahn 2400624415SFlorian Hahnend: 2500624415SFlorian Hahn %p = phi i32 [ 11, %entry ], [ 11, %if.true] 2600624415SFlorian Hahn %xor.1 = xor i32 %p, %p 2700624415SFlorian Hahn %c.1 = icmp eq i32 %xor.1, 0 2800624415SFlorian Hahn call void @use(i1 %c.1) 2900624415SFlorian Hahn %c.2 = icmp eq i32 %xor.1, 10 3000624415SFlorian Hahn call void @use(i1 %c.2) 3100624415SFlorian Hahn %xor.2 = xor i32 %p, 1 3200624415SFlorian Hahn %c.3 = icmp eq i32 %xor.2, 11 3300624415SFlorian Hahn call void @use(i1 %c.3) 3400624415SFlorian Hahn %c.4 = icmp eq i32 %xor.2, 10 3500624415SFlorian Hahn call void @use(i1 %c.4) 3600624415SFlorian Hahn ret void 3700624415SFlorian Hahn} 3800624415SFlorian Hahn 3900624415SFlorian Hahndeclare void @use(i1) 40