+ class1 = classify_pointer(irg, base1, ent1);
+ class2 = classify_pointer(irg, base2, ent2);
+
+ if (class1 == ir_sc_pointer) {
+ if (class2 & ir_sc_modifier_nottaken) {
+ /* a pointer and an object whose objects was never taken */
+ return ir_no_alias;
+ }
+ } else if (class2 == ir_sc_pointer) {
+ if (class1 & ir_sc_modifier_nottaken) {
+ /* a pointer and an object whose objects was never taken */
+ return ir_no_alias;
+ }
+ } else if (class1 != class2) {
+ /* two objects from different memory spaces */
+ return ir_no_alias;
+ } else {
+ /* both classes are equal */
+ if (class1 == ir_sc_globalvar) {
+ ir_entity *entity1 = get_SymConst_entity(base1);
+ ir_entity *entity2 = get_SymConst_entity(base2);
+ if (entity1 != entity2)
+ return ir_no_alias;
+
+ /* for some reason CSE didn't happen yet for the 2 SymConsts... */
+ return ir_may_alias;
+ }
+ }
+
+ /* Type based alias analysis */