1ac93a4e7SChen Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2ac93a4e7SChen Zheng; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -global-isel -o - \ 3ac93a4e7SChen Zheng; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s 4ac93a4e7SChen Zheng 5ac93a4e7SChen Zheng;; Note that SETUEQ, SETOGE, SETOLE, SETONE, SETULT and SETUGT should be 6*6a930e88SChen Zheng;; expanded by DAG legalizer for floating-point types f32 and f64, so there are 7*6a930e88SChen Zheng;; no patterns defined in PPCInstrInfo.td file for these setcc patterns for now. 8ac93a4e7SChen Zheng 9ac93a4e7SChen Zhengdefine i1 @fcmp_false(float %a, float %b) { 10ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_false: 11ac93a4e7SChen Zheng; CHECK: # %bb.0: 12ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 13ac93a4e7SChen Zheng; CHECK-NEXT: blr 14ac93a4e7SChen Zheng %cmp = fcmp false float %a, %b 15ac93a4e7SChen Zheng ret i1 %cmp 16ac93a4e7SChen Zheng} 17ac93a4e7SChen Zheng 18ac93a4e7SChen Zhengdefine i1 @fcmp_oeq(float %a, float %b) { 19ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_oeq: 20ac93a4e7SChen Zheng; CHECK: # %bb.0: 21ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 22ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 23ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 24ac93a4e7SChen Zheng; CHECK-NEXT: iseleq r3, r4, r3 25ac93a4e7SChen Zheng; CHECK-NEXT: blr 26ac93a4e7SChen Zheng %cmp = fcmp oeq float %a, %b 27ac93a4e7SChen Zheng ret i1 %cmp 28ac93a4e7SChen Zheng} 29ac93a4e7SChen Zheng 30ac93a4e7SChen Zhengdefine i1 @fcmp_ogt(float %a, float %b) { 31ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ogt: 32ac93a4e7SChen Zheng; CHECK: # %bb.0: 33ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 34ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 35ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 36ac93a4e7SChen Zheng; CHECK-NEXT: iselgt r3, r4, r3 37ac93a4e7SChen Zheng; CHECK-NEXT: blr 38ac93a4e7SChen Zheng %cmp = fcmp ogt float %a, %b 39ac93a4e7SChen Zheng ret i1 %cmp 40ac93a4e7SChen Zheng} 41ac93a4e7SChen Zheng 42ac93a4e7SChen Zhengdefine i1 @fcmp_olt(float %a, float %b) { 43ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_olt: 44ac93a4e7SChen Zheng; CHECK: # %bb.0: 45ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 46ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 47ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 48ac93a4e7SChen Zheng; CHECK-NEXT: isellt r3, r4, r3 49ac93a4e7SChen Zheng; CHECK-NEXT: blr 50ac93a4e7SChen Zheng %cmp = fcmp olt float %a, %b 51ac93a4e7SChen Zheng ret i1 %cmp 52ac93a4e7SChen Zheng} 53ac93a4e7SChen Zheng 54ac93a4e7SChen Zhengdefine i1 @fcmp_ord(float %a, float %b) { 55ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ord: 56ac93a4e7SChen Zheng; CHECK: # %bb.0: 57ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 58ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 59ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 60ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, un 61ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 62ac93a4e7SChen Zheng; CHECK-NEXT: blr 63ac93a4e7SChen Zheng %cmp = fcmp ord float %a, %b 64ac93a4e7SChen Zheng ret i1 %cmp 65ac93a4e7SChen Zheng} 66ac93a4e7SChen Zheng 67ac93a4e7SChen Zhengdefine i1 @fcmp_uge(float %a, float %b) { 68ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uge: 69ac93a4e7SChen Zheng; CHECK: # %bb.0: 70ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 71ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 72ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 73ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, lt 74ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 75ac93a4e7SChen Zheng; CHECK-NEXT: blr 76ac93a4e7SChen Zheng %cmp = fcmp uge float %a, %b 77ac93a4e7SChen Zheng ret i1 %cmp 78ac93a4e7SChen Zheng} 79ac93a4e7SChen Zheng 80ac93a4e7SChen Zhengdefine i1 @fcmp_ule(float %a, float %b) { 81ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ule: 82ac93a4e7SChen Zheng; CHECK: # %bb.0: 83ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 84ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 85ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 86ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, gt 87ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 88ac93a4e7SChen Zheng; CHECK-NEXT: blr 89ac93a4e7SChen Zheng %cmp = fcmp ule float %a, %b 90ac93a4e7SChen Zheng ret i1 %cmp 91ac93a4e7SChen Zheng} 92ac93a4e7SChen Zheng 93ac93a4e7SChen Zhengdefine i1 @fcmp_une(float %a, float %b) { 94ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_une: 95ac93a4e7SChen Zheng; CHECK: # %bb.0: 96ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 97ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 98ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 99ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, eq 100ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 101ac93a4e7SChen Zheng; CHECK-NEXT: blr 102ac93a4e7SChen Zheng %cmp = fcmp une float %a, %b 103ac93a4e7SChen Zheng ret i1 %cmp 104ac93a4e7SChen Zheng} 105ac93a4e7SChen Zheng 106ac93a4e7SChen Zhengdefine i1 @fcmp_uno(float %a, float %b) { 107ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uno: 108ac93a4e7SChen Zheng; CHECK: # %bb.0: 109ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 110ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 111ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 112ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, un 113ac93a4e7SChen Zheng; CHECK-NEXT: blr 114ac93a4e7SChen Zheng %cmp = fcmp uno float %a, %b 115ac93a4e7SChen Zheng ret i1 %cmp 116ac93a4e7SChen Zheng} 117ac93a4e7SChen Zheng 118ac93a4e7SChen Zhengdefine i1 @fcmp_true(float %a, float %b) { 119ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_true: 120ac93a4e7SChen Zheng; CHECK: # %bb.0: 121ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 1 122ac93a4e7SChen Zheng; CHECK-NEXT: blr 123ac93a4e7SChen Zheng %cmp = fcmp true float %a, %b 124ac93a4e7SChen Zheng ret i1 %cmp 125ac93a4e7SChen Zheng} 126ac93a4e7SChen Zheng 127ac93a4e7SChen Zhengdefine i1 @fcmp_false_double(double %a, double %b) { 128ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_false_double: 129ac93a4e7SChen Zheng; CHECK: # %bb.0: 130ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 131ac93a4e7SChen Zheng; CHECK-NEXT: blr 132ac93a4e7SChen Zheng %cmp = fcmp false double %a, %b 133ac93a4e7SChen Zheng ret i1 %cmp 134ac93a4e7SChen Zheng} 135ac93a4e7SChen Zheng 136ac93a4e7SChen Zhengdefine i1 @fcmp_oeq_double(double %a, double %b) { 137ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_oeq_double: 138ac93a4e7SChen Zheng; CHECK: # %bb.0: 139ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 140ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 141ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 142ac93a4e7SChen Zheng; CHECK-NEXT: iseleq r3, r4, r3 143ac93a4e7SChen Zheng; CHECK-NEXT: blr 144ac93a4e7SChen Zheng %cmp = fcmp oeq double %a, %b 145ac93a4e7SChen Zheng ret i1 %cmp 146ac93a4e7SChen Zheng} 147ac93a4e7SChen Zheng 148ac93a4e7SChen Zhengdefine i1 @fcmp_ogt_double(double %a, double %b) { 149ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ogt_double: 150ac93a4e7SChen Zheng; CHECK: # %bb.0: 151ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 152ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 153ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 154ac93a4e7SChen Zheng; CHECK-NEXT: iselgt r3, r4, r3 155ac93a4e7SChen Zheng; CHECK-NEXT: blr 156ac93a4e7SChen Zheng %cmp = fcmp ogt double %a, %b 157ac93a4e7SChen Zheng ret i1 %cmp 158ac93a4e7SChen Zheng} 159ac93a4e7SChen Zheng 160ac93a4e7SChen Zhengdefine i1 @fcmp_olt_double(double %a, double %b) { 161ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_olt_double: 162ac93a4e7SChen Zheng; CHECK: # %bb.0: 163ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 164ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 165ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 166ac93a4e7SChen Zheng; CHECK-NEXT: isellt r3, r4, r3 167ac93a4e7SChen Zheng; CHECK-NEXT: blr 168ac93a4e7SChen Zheng %cmp = fcmp olt double %a, %b 169ac93a4e7SChen Zheng ret i1 %cmp 170ac93a4e7SChen Zheng} 171ac93a4e7SChen Zheng 172ac93a4e7SChen Zhengdefine i1 @fcmp_ord_double(double %a, double %b) { 173ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ord_double: 174ac93a4e7SChen Zheng; CHECK: # %bb.0: 175ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 176ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 177ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 178ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, un 179ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 180ac93a4e7SChen Zheng; CHECK-NEXT: blr 181ac93a4e7SChen Zheng %cmp = fcmp ord double %a, %b 182ac93a4e7SChen Zheng ret i1 %cmp 183ac93a4e7SChen Zheng} 184ac93a4e7SChen Zheng 185ac93a4e7SChen Zhengdefine i1 @fcmp_uge_double(double %a, double %b) { 186ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uge_double: 187ac93a4e7SChen Zheng; CHECK: # %bb.0: 188ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 189ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 190ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 191ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, lt 192ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 193ac93a4e7SChen Zheng; CHECK-NEXT: blr 194ac93a4e7SChen Zheng %cmp = fcmp uge double %a, %b 195ac93a4e7SChen Zheng ret i1 %cmp 196ac93a4e7SChen Zheng} 197ac93a4e7SChen Zheng 198ac93a4e7SChen Zhengdefine i1 @fcmp_ule_double(double %a, double %b) { 199ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ule_double: 200ac93a4e7SChen Zheng; CHECK: # %bb.0: 201ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 202ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 203ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 204ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, gt 205ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 206ac93a4e7SChen Zheng; CHECK-NEXT: blr 207ac93a4e7SChen Zheng %cmp = fcmp ule double %a, %b 208ac93a4e7SChen Zheng ret i1 %cmp 209ac93a4e7SChen Zheng} 210ac93a4e7SChen Zheng 211ac93a4e7SChen Zhengdefine i1 @fcmp_une_double(double %a, double %b) { 212ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_une_double: 213ac93a4e7SChen Zheng; CHECK: # %bb.0: 214ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 215ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 216ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 217ac93a4e7SChen Zheng; CHECK-NEXT: crnot 4*cr5+lt, eq 218ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt 219ac93a4e7SChen Zheng; CHECK-NEXT: blr 220ac93a4e7SChen Zheng %cmp = fcmp une double %a, %b 221ac93a4e7SChen Zheng ret i1 %cmp 222ac93a4e7SChen Zheng} 223ac93a4e7SChen Zheng 224ac93a4e7SChen Zhengdefine i1 @fcmp_uno_double(double %a, double %b) { 225ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uno_double: 226ac93a4e7SChen Zheng; CHECK: # %bb.0: 227ac93a4e7SChen Zheng; CHECK-NEXT: fcmpu cr0, f1, f2 228ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 0 229ac93a4e7SChen Zheng; CHECK-NEXT: li r4, 1 230ac93a4e7SChen Zheng; CHECK-NEXT: isel r3, r4, r3, un 231ac93a4e7SChen Zheng; CHECK-NEXT: blr 232ac93a4e7SChen Zheng %cmp = fcmp uno double %a, %b 233ac93a4e7SChen Zheng ret i1 %cmp 234ac93a4e7SChen Zheng} 235ac93a4e7SChen Zheng 236ac93a4e7SChen Zhengdefine i1 @fcmp_true_double(double %a, double %b) { 237ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_true_double: 238ac93a4e7SChen Zheng; CHECK: # %bb.0: 239ac93a4e7SChen Zheng; CHECK-NEXT: li r3, 1 240ac93a4e7SChen Zheng; CHECK-NEXT: blr 241ac93a4e7SChen Zheng %cmp = fcmp true double %a, %b 242ac93a4e7SChen Zheng ret i1 %cmp 243ac93a4e7SChen Zheng} 244