Mercurial > projects > ldc
comparison gen/toir.cpp @ 575:f0c20d50d4b3
Pointer comparisons were being treated as signed integers. Now they are handled as unsigned integers.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Thu, 04 Sep 2008 17:24:10 +0200 |
parents | aee6217b4084 |
children | fbb1a366cfbc |
comparison
equal
deleted
inserted
replaced
574:aee6217b4084 | 575:f0c20d50d4b3 |
---|---|
1176 | 1176 |
1177 if (t->isintegral() || t->ty == Tpointer) | 1177 if (t->isintegral() || t->ty == Tpointer) |
1178 { | 1178 { |
1179 llvm::ICmpInst::Predicate cmpop; | 1179 llvm::ICmpInst::Predicate cmpop; |
1180 bool skip = false; | 1180 bool skip = false; |
1181 // pointers don't report as being unsigned | |
1182 bool uns = (t->isunsigned() || t->ty == Tpointer); | |
1181 switch(op) | 1183 switch(op) |
1182 { | 1184 { |
1183 case TOKlt: | 1185 case TOKlt: |
1184 case TOKul: | 1186 case TOKul: |
1185 cmpop = t->isunsigned() ? llvm::ICmpInst::ICMP_ULT : llvm::ICmpInst::ICMP_SLT; | 1187 cmpop = uns ? llvm::ICmpInst::ICMP_ULT : llvm::ICmpInst::ICMP_SLT; |
1186 break; | 1188 break; |
1187 case TOKle: | 1189 case TOKle: |
1188 case TOKule: | 1190 case TOKule: |
1189 cmpop = t->isunsigned() ? llvm::ICmpInst::ICMP_ULE : llvm::ICmpInst::ICMP_SLE; | 1191 cmpop = uns ? llvm::ICmpInst::ICMP_ULE : llvm::ICmpInst::ICMP_SLE; |
1190 break; | 1192 break; |
1191 case TOKgt: | 1193 case TOKgt: |
1192 case TOKug: | 1194 case TOKug: |
1193 cmpop = t->isunsigned() ? llvm::ICmpInst::ICMP_UGT : llvm::ICmpInst::ICMP_SGT; | 1195 cmpop = uns ? llvm::ICmpInst::ICMP_UGT : llvm::ICmpInst::ICMP_SGT; |
1194 break; | 1196 break; |
1195 case TOKge: | 1197 case TOKge: |
1196 case TOKuge: | 1198 case TOKuge: |
1197 cmpop = t->isunsigned() ? llvm::ICmpInst::ICMP_UGE : llvm::ICmpInst::ICMP_SGE; | 1199 cmpop = uns ? llvm::ICmpInst::ICMP_UGE : llvm::ICmpInst::ICMP_SGE; |
1198 break; | 1200 break; |
1199 case TOKue: | 1201 case TOKue: |
1200 cmpop = llvm::ICmpInst::ICMP_EQ; | 1202 cmpop = llvm::ICmpInst::ICMP_EQ; |
1201 break; | 1203 break; |
1202 case TOKlg: | 1204 case TOKlg: |